[ACM] POJ 2506 Tiling (递归,睑板)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 7487 | Accepted: 3661 |
Description
Here is a sample tiling of a 2x17 rectangle.

Input
Output
Sample Input
2
8
12
100
200
Sample Output
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
Source
解题思路:
有两种长方形, 1*2 (长1。高2), 2*2 .给定一块 n*2的大长方形,问用两种规格的长方形把它铺满,一共同拥有多少种方法。
如果已经求得了 长度为n-1 的方法数。那么要铺满n,仅仅有一种方法。用1*2
如果已经求得了 长度为n-2 的方法数,那么要铺满n。有三种方法



可是第三种会跟已经求得了长度为n-1的方法数的情况反复,去掉。
所以求得的递推方程为 f [0] =1 f[1] = 1 f[2] =3 f[n]= f[n-2]*2 + f[n-1]
须要注意的是本题用到了大数。
代码:
#include <iostream>
#include <string.h>
using namespace std;
string s1,s2;
int a[1000],b[1000],c[1000];//a,b保存两个字符串得到的大数。c保存a,b相加以后得到的大数
string f[300]; string add(string s1,string s2) //将大数s1,s2相加。并返回字符串类型的结果
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
string result;
int lena=s1.length();
int lenb=s2.length();
int k=0;
for(int i=lena-1;i>=0;i--)
a[k++]=s1[i]-'0';
k=0;
for(int j=lenb-1;j>=0;j--)
b[k++]=s2[j]-'0';
int len=lena>lenb? lena:lenb;
for(int i=0;i<len;i++)
{
c[i]+=a[i]+b[i];//注意是+=,还要考虑进位
if(c[i]>=10)
{
c[i+1]++;
c[i]-=10;
}
}
int i;
for( i=999;i>=0;i--)
if(c[i]!=0)
break;
for(;i>=0;i--)
result+=(char)(c[i]+'0');
return result;
} void get()
{
f[0]="1";
f[1]="1";
f[2]="3";
f[3]="5";
for(int i=4;i<=250;i++)
{
f[i]=add(f[i-2],f[i-2]);
f[i]=add(f[i],f[i-1]);
}
}
int main()
{
get();
int n;
while(cin>>n)
{
cout<<f[n]<<endl;
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
[ACM] POJ 2506 Tiling (递归,睑板)的更多相关文章
- poj 2506 Tiling(递推 大数)
题目:http://poj.org/problem?id=2506 题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加; 以前做过了的 #include<stdio.h> # ...
- POJ 2506 Tiling(递推+大整数加法)
http://poj.org/problem?id=2506 题意: 思路:递推.a[i]=a[i-1]+2*a[i-2]. 计算的时候是大整数加法.错了好久,忘记考虑1了...晕倒. #includ ...
- poj 2506 Tiling(java解法)
题目链接:id=2506">http://poj.org/problem?id=2506 本题用的java解的.由于涉及到大数问题,假设对java中的大数操作不熟悉请点这儿:链接 思路 ...
- POJ 2506 Tiling (递推 + 大数加法模拟 )
Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7965 Accepted: 3866 Descriptio ...
- poj 2506 Tiling 递推
题目链接: http://poj.org/problem?id=2506 题目描述: 有2*1和2*2两种瓷片,问铺成2*n的图形有多少种方法? 解题思路: 利用递推思想,2*n可以由2*(n-1)的 ...
- POJ 2506 Tiling
Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7437 Accepted: 3635 Descriptio ...
- poj 2506 Tiling(高精度)
Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tili ...
- poj 2506 Tiling(大数+规律)
poj2506Tiling 此题规律:A[0]=1;A[1]=1;A[2]=3;--A[n]=A[n-1]+2*A[n-2];用大数来写,AC代码: #include<stdio.h> # ...
- POJ 2506 Tiling dp+大数 水题
大致题意:现有两种方块(1X2,2X2),方块数量无限制.问用这两种方块填满2Xn的矩阵的填法有多少种. 分析:通俗点说,找规律.专业化一点,动态规划. 状态d[i],表示宽度为i的填法个数. 状态转 ...
随机推荐
- POJ 2531-Network Saboteur(DFS)
Network Saboteur Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9435 Accepted: 4458 ...
- Team Foundation Server 2015使用教程--默认团队权限说明
- eclipse 中 Android sdk 无法更新的问题
诶,真是麻烦,想下个东西都下不了. 我也好久没折腾过这个了,在家的电脑是早就下载好了的,然后如今又须要下载一份.下不到.网上搜到了资料,记录下来: 第一种方法: sdk manager - ...
- harris 算法python实现
harris 最常用作特征检测算法. 第一个文件harris.py <pre name="code" class="python">from sci ...
- 一个sql的优化
原文:一个sql的优化 目的:为了查询某天某个服务器上的登录id的个数 刚开始编写的sql: select count(a.mac) logusers from Log_MacLogin_All ...
- Java多线程之Lock的使用(转)
package thread.lock; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execut ...
- 补间动画实现(tween)
1.补间动画的概念: 补间动画:仅仅须要开发人员设置好动画的開始与结束的关键帧 中间帧有喜用计算机补齐. 2.种类:分为4种: ①alpha 透明度 ②alpha 透明度 ③translate 位置移 ...
- maven 编
Eclipse 对 run as [Run Configurations] main标签. Goals:输入命令:clean install -Dmaven.test.skip=tru ...
- .Net中把图片等文件放入DLL中,并在程序中引用
原文:.Net中把图片等文件放入DLL中,并在程序中引用 [摘要] 有时我们需要隐藏程序中的一些资源,比如游戏,过关后才能看到图片,那么图片就必须隐藏起来,否则不用玩这个游戏就可以看到你的图片了,呵呵 ...
- 编程算法 - 阅读完整的文件(C++)
阅读完整的文件(C++) 本文地址: http://blog.csdn.net/caroline_wendy C++: 把文本文件(txt)的全部内容读入字符串(string), 最高效的方法. 代码 ...