這道題寒假的時候看過,還不小心看了題解,不過題解說神馬早就忘了,剛開始解題的時候完全想錯了,後來才想起來是用矩陣構造
這道題的確適合構造矩陣,因為所求的函式值滿足線性關係,令f(n)為最終求解值
首先我們要明確如果用矩陣的作法,那麼矩陣乘法中,最終矩陣,必須包含f(n),還可以包含其他函式g(n),h(n)等等。作為乘數項的矩陣不得與n有關,只能與x有關
f(n+1) = f(n) + x^(n+1)*(n+1)^x
=f(n) + (c(x,0)*n^x + c(x,1)*n^(x-1)+ ... +c(x,x-1)*n+1)*x^(n+1)
=f(n) + (c(x,0)*n^x*(x^n) + c(x,1)*n^(x-1)*(x^n)+ ... +c(x,x-1)*n*(x^n)+1*(x^n))*x
=f(n) + (x*c(x,0)*n^x*(x^n) + x*c(x,1)* n^(x-1)*x^n+...)
很明顯,我把x^(n+1)*(n+1)^x 寫成了sum,const(i)與n無關,可以乘數項矩陣的一部分),而g(i,n)可以作為最終矩陣的一部分
更重要的是,g(i,n)要和f(n)放在一起構成最終矩陣,也就是g(i,n)如何表達?
g(i+1,n) =(i+1)^x*(x^n) = (c(i,0)*i^x + c(i,1)*i^(x-1) + ..+c(i,i)*i^0) *(x^(n+1))
= (c(i,0)*x*t0 + c(i,1)*x*t1 + ...+c(i,i)*x*ti)
tj = i^j*(x^n) = g(j,n-1) 0<=j<=i
最終矩陣為(g(0,n),g(1,n),....g(x,n),f(n)) ,乘數矩陣這裡略掉,寫出來太麻煩,附**:
#include #include #include #include #include #include #define n 60
#define cl(a) memset(a,0,sizeof(a))
#define ss(a) scanf("%d",&a)
#define ll __int64
#define pb push_back
using namespace std;
ll a[n][n][n],c[n][n],r[n];
vectorgener;
int mod,k;
void generate_cmb()
}void init()
void rmul(int x)
}void mul(int x)
for (int i=0;i<=k+1;i++) r[i]=gener[i];
}void quick(int n) }
int main()
{ int n;
while (ss(n)!=eof)
{ss(k);ss(mod);
if (n<0&&k<0&&mod<0) break;
if (n==1)
{cout<
hdu 3483 矩陣乘法
這個題目上週對抗賽題目,搞了我好久 對數學這種不是很敏感 其實都不是自己想出來的,看其他的資料和部落格的推導 還是有點難度的,反正我是推不出來 通過二項式定理的化簡 有兩個部落格寫得比較好 反正構造好二項式之後,乘n次,就可以得到結果了,因為右邊的式子 初始全部是x。include include ...
hdu2276 矩陣構造
題意 給了n個燈泡的狀態,他們繞成乙個環,0是滅,1是亮,每一秒燈泡的狀態都會改變,規則是如果當前這個燈泡的左邊的燈泡當前是狀態1,那麼下一秒當前的這個燈泡狀態就改變0變1,1變0,最後問你m秒後的狀態。思路 我們先找當前狀態和下乙個狀態的關係 狀態也就是秒 我們可以抽象成這麼一種關係,如果第i個燈...
矩陣構造 hdu3306
題意 定義另一種類似斐波那契數列的數列,a 0 1 a 1 1 a n x a n 1 y a n 2 n 2 現在要計算s n s n a 0 2 a 1 2 a n 2.資料範圍 每組樣例給定 n,x y.n 2 n 2 31 1 x 2 x 2 31 1 y 2 y 2 31 1 題解 因為n...