[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的填法个数. 状态转 ...
随机推荐
- 远程访问mysql(转)
GRANT ALL PRIVILEGES ON *.* TO '<username>'@'<remote addr or %(for all ip addr)>'IDENTIF ...
- 百度官方wormHole后门检测记录(转)
本次这个安卓后门真是哔了狗了,刚加入大安卓阵营就出了这个篓子,跟你root不root和什么安卓版本没有版毛钱关系,完全是百度SDK官方提供的后门,不是漏洞,人为的. 乌云地址:http://drops ...
- ASP.NET MVC:Razor 引入命名空间
原文:ASP.NET MVC:Razor 引入命名空间 页面中引用 c# @using MvcApplication83.Models @using MvcApplication83.Common 行 ...
- HDU 4085 Steiner树
主题链接:pid=4085">http://acm.hdu.edu.cn/showproblem.php? pid=4085 由于这题专门花一晚上学习斯坦纳树.找到比較好的学习资料,链 ...
- thinkphp学习笔记7—多层MVC
原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...
- atcoder 它February 29th
Time limit : 2sec / Stack limit : 256MB / Memory limit : 256MB Problem Charlie was born January 1st ...
- js json string 互转
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = JSON.pars ...
- AT&T汇编——在你开始写
不知不觉,少年将超过,计算机相关知识,学到基本上可以说是教过.毕业.所以,我们打算更深入了解自己的兴趣背着背笼.也因为它是检讨大学. 计划写的内容在: 1.汇编语言 2.C/C++语言 3.Linux ...
- 华为G520联通版刷机包 基于MIUI CM11新 平稳 稳定
ROM介绍 刷先配置双卡:"设定-安卓原生设置-双卡套-配置订阅",否则,无信号 使开发人员选项方法:"设定-安卓原生设置-关于手机-发布"连续点击版本 启用A ...
- Leetcode:unique_binary_search_trees
一. 称号 给定的数目n.问:有多少种不同BST(二叉搜索树) 比如: 因为N =3,共同拥有5种独特的BST. 1 3 3 2 1 \ ...