1. 程式人生 > 實用技巧 >P1255 數樓梯

P1255 數樓梯

題目連結:P1255

解題思路:

倒推,最後上樓梯的方法數等於f(n) = f(n-1) + f(n-2),用遞推+高精

AC程式碼:

 1 #include <iostream>
 2 #define mx 1212 // 固定位數
 3 using namespace std;
 4 int a[5010][5010],f;
 5 int main()
 6 {
 7     f = 0;
 8     a[1][0] = 1; a[2][0] = 2; // 初始計算出前兩個
 9     for(int i = 3; i < 5010; i++) // 離線計算
10     {
11         if
(i == 5009) break; 12 for(int j = 0; j < mx; j++) // 高精度加法 13 { 14 a[i][j] += a[i-1][j]+a[i-2][j]; 15 if(a[i][j] >= 10) 16 { 17 a[i][j+1] = a[i][j+1]+a[i][j]/10; 18 a[i][j] %= 10; 19 } 20 } 21 } 22
int n; 23 cin >> n; 24 if(n == 0) {cout << 0; return 0;} 25 for(int i = mx; i >= 0; i--) 26 { 27 if(a[n][i] == 0 && f == 0) continue; // 輸出除去前導零 28 else {cout << a[n][i]; f = 1;} 29 } 30 return 0; 31 }