poj 2506 Tiling 《大数加法+递推》
2016-03-24 20:18
381 查看
Tiling
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 8689 Accepted: 4183
Description
In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles?
Here is a sample tiling of a 2x17 rectangle.
Input
Input is a sequence of lines, each line containing an integer number 0 <= n <= 250.
Output
For each line of input, output one integer number in a separate line giving the number of possible tilings of a 2xn rectangle.
Sample Input
2
8
12
100
200
Sample Output
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
Source
The UofA Local 2000.10.14
神题。。。n=0时,输出1。。。。。。。。。。
代码:
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 8689 Accepted: 4183
Description
In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles?
Here is a sample tiling of a 2x17 rectangle.
Input
Input is a sequence of lines, each line containing an integer number 0 <= n <= 250.
Output
For each line of input, output one integer number in a separate line giving the number of possible tilings of a 2xn rectangle.
Sample Input
2
8
12
100
200
Sample Output
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
Source
The UofA Local 2000.10.14
神题。。。n=0时,输出1。。。。。。。。。。
代码:
#include<cstdio> #include<cstring> int s[50],n; int ge[310][200],shu[310]; void suan(int xx) { int ii=xx; shu[ii]=shu[ii-1]; for (int i=0;i<shu[ii];i++) { ge[ii][i]=ge[ii][i]+ge[ii-1][i]+ge[ii-2][i]*2; if (ge[ii][shu[ii]-1]>9) shu[ii]++; if (ge[ii][i]>9) { ge[ii][i+1]=ge[ii][i]/10; ge[ii][i]=ge[ii][i]%10; } } } int main() { s[0]=1;s[1]=1;s[2]=3; for (int i=3;i<31;i++) { s[i]=s[i-1]+2*s[i-2]; } memset(ge,0,sizeof(ge)); ge[29][0]=1;ge[29][1]=4;ge[29][2]=9;ge[29][3]=3;ge[29][4]=1;ge[29][5]=9;ge[29][6]=7;ge[29][7]=5;ge[29][8]=3; ge[30][0]=3;ge[30][1]=8;ge[30][2]=8;ge[30][3]=7;ge[30][4]=2;ge[30][5]=8;ge[30][6]=5;ge[30][7]=1;ge[30][8]=7; shu[29]=9;shu[30]=9; for (int i=31;i<305;i++) { suan(i); } while (~scanf("%d",&n)) { if (n<31) { printf("%d\n",s ); continue; } for (int i=shu -1;i>=0;i--) printf("%d",ge [i]); printf("\n"); } return 0; }
相关文章推荐
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) B. Bear and Compressing
- 最大公约数
- artDialog记录
- shell中的字符串操作和数学运算
- 二维有序矩阵的查找
- matlab 曲线拟合
- matlab 曲线拟合
- bzoj 3065: 带插入区间K小值 替罪羊树套主席树
- iOS 检测版本升级比较好用的第三方类库Harpy的简单使用
- 扣丁学堂笔记第07天高级UI组件(三)
- 内核态和用户态的区别
- Directx11学习笔记【九】 【转】 3D渲染管线
- shell
- 栈的运用(十进制转换八进制,括号匹配问题)
- 【HPU】[1736]老王修马路(二)
- 滤镜
- android开发之SQLite详解
- corethink功能模块探索开发(五)开启这个模块的配置
- ListView常用小技巧
- 有符号数与无符号数