1. 程式人生 > >【矩陣加速】【數學】2019雅禮集訓 math

【矩陣加速】【數學】2019雅禮集訓 math

題目:

在這裡插入圖片描述
在這裡插入圖片描述
簡單地說,就是對於n的每一個長度為m的劃分( k i > 0 k_i>0 ),求出其貢獻的值之和。


分析:

非常神奇的三角函式題:
首先,可以想到,劃分問題有一個很經典的DP
定義 D

P ( i , j ) DP(i,j) 表示將i劃分為j個的方案數。
轉移式為: D
P ( i , j ) = D P ( i
1 , j 1 ) + D P ( i j , j ) DP(i,j)=DP(i-1,j-1)+DP(i-j,j)
。即考慮劃分狀態中存在/不存在1的情況。存在1,則通過去掉那個1轉移,不存在1,則通過每一位-1來轉移。

考慮將這個DP方式套在這裡:
定義 f ( i , j ) f(i,j) 表示將n=i,m=j時的答案。
若m項中,存在1,則轉移到 f ( i 1 , j 1 ) s i n ( x ) f(i-1,j-1)*sin(x)

若不存在1,此時不必所有項都-1,只需要某一項-1就能轉移了:

首先通過和角公式得到:
s i n ( k i x ) = s i n ( ( k i 1 ) x ) c o s ( x ) + c o s ( ( k i 1 ) x ) s i n ( x ) sin(k_ix)=sin((k_i-1)x)cos(x)+cos((k_i-1)x)sin(x)

其中前半部分 s i n ( ( k i 1 ) x ) sin((k_i-1)x) 就是我們要的,但後半部分還不對。

繼續運用和角公式:
s i n ( x ) c o s ( ( k i 1 ) x ) = s i n ( x ) { c o s ( ( k i 2 ) x ) c o s ( x ) s i n ( ( k i 2 ) x ) s i n ( x ) } sin(x)cos((k_i-1)x)=sin(x)\{cos((k_i-2)x)cos(x)-sin((k_i-2)x)sin(x)\}
s i n ( x ) sin(x) 乘進去
= s i n ( x ) c o s ( x ) c o s ( ( k i 2 ) x ) s i n 2 ( x ) s i n ( ( k i 2 ) x ) =sin(x)cos(x)cos((k_i-2)x)-sin^2(x)sin((k_i-2)x)
因為 s i n 2 ( x ) = 1 c o s 2 ( x ) sin^2(x)=1-cos^2(x)
= c o s ( x ) { s i n ( x ) c o s ( ( k i 2 ) x ) + c o s ( x ) s i n ( ( k i 2 ) x ) } s i n ( ( k i 2 ) x ) =cos(x)\{sin(x)cos((k_i-2)x)+cos(x)sin((k_i-2)x)\}-sin((k_i-2)x)
顯然大括號裡面的也是個和角公式。
= c o s ( x ) s i n ( ( k i 1 ) x ) s i n ( ( k i 2 ) x ) =cos(x)sin((k_i-1)x)-sin((k_i-2)x)
綜上所述:
s i n ( k i x ) = 2 c o s ( x ) s i n ( ( k i 1 ) x ) s i n ( ( k i 2 ) x ) sin(k_ix)=2cos(x)sin((k_i-1)x)-sin((k_i-2)x)
換言之:
f ( i , j ) = 2 c o s ( x ) f ( i 1 , j ) f ( i 2 , j ) f(i,j)=2cos(x)f(i-1,j)-f(i-2,j)
再加上之前的存在1的情況。
就是
f ( i , j ) = 2 c o s ( x ) f ( i 1 , j ) f ( i 2 , j ) + f ( i 1 , j 1 ) f(i,j)=2cos(x)f(i-1,j)-f(i-2,j)+f(i-1,j-1)