hdu 2842 矩陣高速冪 遞推

2021-09-07 17:20:13 字數 957 閱讀 5231

題意:乙個中國環的遊戲,規則是乙個木棒上有n個環。第乙個環是能夠任意放上或拆下的,剩下的環x假設想放上或拆下必須前乙個環x-1是放上的且前x-2個環所有是拆下的,問n個環最少多少次操作能夠所有拆掉。

題解:須要進行遞推,首先第一步肯定是要拆第n個環保證操作次數最少,由於後面的環是否存在對前面的環不造成影響,而先拆前面的假設要拆後面的環還是要把前面的放上,f(n)表示拆掉前n個環須要的最少操作次數,先拆第n個要拆前n-2個再拆第n個。花費f(n-2)+1,然後這時是00…0010。要拆第n-1個須要先把前n-2個放上,花費的步數和拆下是一樣是f(n-2),這時就是11…1110,所有拆掉就是f(n-1),因此遞推公式是f(n) = f(n-1) + 2 * f(n-2) + 1。

最後矩陣高速冪即可了。

#include 

#include

const

int mod = 200907;

struct mat ori, res;

long

long n;

mat multiply(mat x, mat y)

return temp;

}void calc(long

long n)

}int main()

memset(ori.g, 0, sizeof(ori.g));

memset(res.g, 0, sizeof(res.g));

ori.g[0][0] = 2;

ori.g[0][1] = ori.g[0][2] = 1;

res.g[0][0] = res.g[0][1] = res.g[2][0] = res.g[2][2] = 1;

res.g[1][0] = 2;

calc(n - 2);

printf("%lld\n", ori.g[0][0]);

}return

0;}

HDU 2842 遞推 矩陣快速冪

題目大意 棒子上套環。第i個環能拿下的條件是 第i 1個環在棒子上,前i 2個環不在棒子上。每個環可以取下或放上,cost 1。求最小cost。mod 200907。解題思路 題目意思非常無聊,感覺是yy的。設 dp i 為取第i個環時的總cost。dp 1 1 dp 2 2 前兩個環取下是沒有條件...

HDU 2842 遞推 矩陣快速冪

題目大意 棒子上套環。第i個環能拿下的條件是 第i 1個環在棒子上,前i 2個環不在棒子上。每個環可以取下或放上,cost 1。求最小cost。mod 200907。解題思路 題目意思非常無聊,感覺是yy的。設 dp i 為取第i個環時的總cost。dp 1 1 dp 2 2 前兩個環取下是沒有條件...

HDU 2604 Queuing(矩陣高速冪)

這題僅僅要推出公式來,構造矩陣就非常easy了。問題是推不出公式來。tat。從遞推的思路考慮。用f n 表示n個人滿足條件的結果。假設最後乙個是m則前n 1人能夠隨意排列,有f n 1 種 假設是f,則考慮後兩位mf和ff,沒有一定滿足或者一定不滿足的狀態,所以繼續考慮一位,考慮後三位mmf,fmf...