9273:PKU2506Tiling
9273:PKU2506Tiling
來源:http://noi.openjudge.cn/ch0202/9273/
總時(shí)間限制:2000ms? 單個(gè)測(cè)試點(diǎn)時(shí)間限制:1000ms
內(nèi)存限制:131072kB
描述
??? 對(duì)于一個(gè)2行N列的走道。現(xiàn)在用1*2,2*2的磚去鋪滿。問有多少種不同的方式。
??? 下圖是一個(gè)2行17列的走道的某種鋪法。
輸入
??? 整個(gè)測(cè)試有多組數(shù)據(jù),請(qǐng)做到文件底結(jié)束。每行給出一個(gè)數(shù)字N,0 <= n <= 250
輸出
??? 如題
樣例輸入
??? 2
??? 8
??? 12
??? 100
??? 200
樣例輸出
??? 3
??? 171
??? 2731
??? 845100400152152934331135470251
??? 1071292029505993517027974728227441735014801995855195223534251
分析:
f[n] = f[n-1] + f[n-2]*2 ;
使用這個(gè)遞推公式,再加上高精度計(jì)算即可。
綜合了高精度、遞推,而且高精度的運(yùn)用比較熟悉、巧妙。
?
代碼來源:http://blog.csdn.net/c20180630/article/details/52329721
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[301][501]; //a[i]用來存儲(chǔ)一個(gè)大整數(shù),其中a[i][0]存儲(chǔ)長度,真實(shí)數(shù)據(jù)倒序存儲(chǔ)。 5 int max(int x,int y){return x>y?x:y;} 6 int main() 7 { 8 a[1][0]=1; 9 a[1][1]=1; 10 a[2][0]=1; 11 a[2][1]=3; 12 for(int i=3;i<=300;i++){ 13 for(int j=1;j<=max(a[i-2][0],a[i-1][0]);j++) 14 a[i][j]=a[i-1][j]+a[i-2][j]*2; //高精度加法(按位加的操作) 15 a[i][0]=max(a[i-2][0],a[i-1][0]); 16 for(int j=1;j<=a[i][0];j++){ //高精度加法的進(jìn)位 17 a[i][j+1]+=a[i][j]/10; 18 a[i][j]%=10; 19 } 20 while(a[i][a[i][0]+1]){ //更新高精度加法結(jié)果的位數(shù) 21 a[i][0]++; 22 a[i][a[i][0]+1]+=a[i][a[i][0]]/10; 23 } 24 } 25 int n; 26 while(cin>>n){ 27 if(n==0) 28 cout<<1<<endl; 29 else{ 30 for(int i=a[n][0];i>=1;i--) 31 cout<<a[n][i]; 32 cout<<endl; 33 } 34 } 35 }轉(zhuǎn)載于:https://www.cnblogs.com/huashanqingzhu/p/6535989.html
總結(jié)
以上是生活随笔為你收集整理的9273:PKU2506Tiling的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【java 类加载的深入研究1】load
- 下一篇: qt tableWidget 表格控件使