hdu 3483 矩陣構造

2021-06-16 18:51:19 字數 1548 閱讀 3855

這道題寒假的時候看過,還不小心看了題解,不過題解說神馬早就忘了,剛開始解題的時候完全想錯了,後來才想起來是用矩陣構造

這道題的確適合構造矩陣,因為所求的函式值滿足線性關係,令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...