1. 程式人生 > 其它 >洛谷 P1255 數樓梯

洛谷 P1255 數樓梯

題目連結 https://www.luogu.com.cn/problem/P1255

非常典型的斐波那契+高精度

淺幫舍友做個題。(不喜歡高精!)

∵“對於60%的資料,N50;對於100%的資料,1N5000”

∴提交了一遍60分....


 

用二維陣列dp[x][i],x表示第幾步臺階,i和位數相關。

將走法的位數拆開分別存放在此行的每一列(從1到len)。此行的某一列=上一行的某一列+上上行的某一列。需要注意進位。


 

放AC程式碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,len=1,dp[5005][5005];//len為走法的位數(長度)
4 void hp(int x) 5 { 6 for(int i=1;i<=len;i++)//把某一行的數全部計算為前兩行的和 7 dp[x][i]=dp[x-1][i]+dp[x-2][i]; 8 for(int i=1;i<=len;i++)//進位 9 { 10 if(dp[x][i]>=10) 11 { 12 dp[x][i+1]+=dp[x][i]/10; 13 dp[x][i]=dp[x][i]%10; 14 if(dp[x][len+1
])len++;//如果len+1的位置有數,則len++ 15 } 16 } 17 } 18 int main() 19 { 20 cin>>n; 21 dp[1][1]=1,dp[2][1]=2;//初始化 22 for(int i=3;i<=n;i++)//防止越界 23 hp(i); 24 for(int i=len;i>=1;i--)//逆序輸出 25 cout<<dp[n][i]; 26 return 0; 27 }