【qduoj - 夏季学期创新题】C语言课程设计-阶梯问题(dp,高精度大数)
生活随笔
收集整理的這篇文章主要介紹了
【qduoj - 夏季学期创新题】C语言课程设计-阶梯问题(dp,高精度大数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題干:
描述
?
N級階梯,人可以一步走一級,也可以一步走兩級,求人從階梯底端走到頂端可以有多少種不同的走法。
輸入
?
一個整數n,代表臺階的階數。
輸出
?
求人從階梯底端走到頂端可以有多少種不同的走法,輸出結果的格式為大整數.
輸入樣例 1?
1輸出樣例 1
1輸入樣例 2?
2輸出樣例 2
2輸入樣例 3?
4輸出樣例 3
5解題報告:
? ?數據小的時候就不解釋了吧、、但是這題原則上是要用高精度的、、但是因為是面向全體學生的。。所以數據就改回了longlong類型、、順便附上暑假寫的那個大數加法、(深深的記得當時調試了半天還以為是大數加法寫錯了結果發現是多組輸入、、2333)
AC代碼:
#include<bits/stdc++.h> #define ll long long using namespace std; char f[5005][10005]; int wei[50005]; int f1[1000005]; int f2[1000005]; ll n; void add(ll x,ll y) {int p = max(wei[y],wei[x]);for(int i = 0; i<p; i++) {f[x][i] = ( f[x][i] + f[y][i] ) ;f[x][i+1] += f[x][i] / 10;f[x][i] %= 10;}while(f[x][p] != 0) {f[x][p+1]+=f[x][p]/10;f[x][p]%=10;p++;}wei[x]=p; } //void add(int *f,int *g) { // int p = max(wei[y],wei[x-2]); // for(int i = 0; i<p; i++) { // f[x][i] = ( f[x][i] + f[y][i] ) ; // f[x][i+1] += f[x][i] / 10; // f[x][i] %= 10; // } // while(f[x][p] != 0) { // f[x][p+1]+=f[x][p]/10; // f[x][p]%=10; // p++; // } // wei[x]=p; //} int main() { ll n;while(~scanf("%lld",&n)) {memset(f,0,sizeof f);f[1][0] = 1;f[2][0] = 2;wei[1]=wei[2]=1;for(ll i = 3; i<=n; i++) {add(i,i-1);add(i,i-2);}for(int i = wei[n]-1; i>=0; i--) {printf("%1d",f[n][i]);}printf("\n");}return 0;}?
總結
以上是生活随笔為你收集整理的【qduoj - 夏季学期创新题】C语言课程设计-阶梯问题(dp,高精度大数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新一代会议利器:微信Winodws测试版
- 下一篇: 与大哥海豚同框 比亚迪海鸥曝光:尺寸更小