題意:乙個中國環的遊戲,規則是乙個木棒上有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...