poj 2506 Tiling
2016-05-31 16:46
162 查看
Tiling
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 |
[Discuss]
公式为a
=a[n-1]+a[n-2]*2,但是我当时没推出来~,
我推出来的是:当i为偶数时a[i]=a[i-1]*2+1;当i为奇数时a[i]=a[i-1]*2-1;
然后用大数相加来写~
还有就是 这道题比较坑的地方吧:n可以为0,并且哪位0时 输出1种方式~~~
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f int a[300][110]; int main() { int n,i,index,j; while(scanf("%d",&n)!=EOF) { if(n==0) { printf("1\n"); continue; } memset(a,0,sizeof(a)); a[1][1]=1; for(i=2;i<=n;i++) { if(i%2==0) { for(j=1;j<110;j++) { if(j==1) a[i][j]=a[i][j]+a[i-1][j]*2+1; else a[i][j]=a[i][j]+a[i-1][j]*2; if(a[i][j]>=10) { a[i][j+1]=a[i][j+1]+a[i][j]/10; a[i][j]=a[i][j]%10; } } } else { for(j=1;j<110;j++) { if(j==1) a[i][j]=a[i][j]+a[i-1][j]*2-1; else a[i][j]=a[i][j]+a[i-1][j]*2; if(a[i][j]>=10) { a[i][j+1]=a[i][j+1]+a[i][j]/10; a[i][j]=a[i][j]%10; } } } } for(i=110;i>0;i--) { if(a[n][i]!=0) { index=i; break; } } for(i=index;i>=1;i--) printf("%d",a[n][i]); printf("\n"); } return 0; }
相关文章推荐
- SSM之WEB整合SpringMVC
- C++中 #ifdef 和#endif的作用
- 算法复习:最大团问题(回溯法和分支限界法)
- 1007. Maximum Subsequence Sum (25)
- java获取cpu、内存、硬盘信息
- libevent入门
- ajax最基础入门
- 邮票分你一半
- mssql游标
- iOS-沙盒路径
- .mui-bar-nav~.mui-content这两个class之间的~什么意思?
- ROS_Kinetic_14 ROS工具roswtf的基本使用方法等
- Android--从零单排系列(1)--打电话,发短信
- Linux7 下重新安装YUM
- ROS_Kinetic_14 ROS工具roswtf的基本使用方法等
- ROS_Kinetic_14 ROS工具roswtf的基本使用方法等
- JVM性能调优5:Heap堆分析方法
- A+B Problem (0 + EOL)
- 利用MAVEN打包可运行jar包,包括依赖的第三方包
- JSP页面编码问题