HDU 2046 骨牌铺方格(斐波那契递推 或者 状压DP)
来源:互联网 发布:手机题库制作软件 编辑:程序博客网 时间:2024/06/06 17:54
原题地址
骨牌铺方格
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 46926 Accepted Submission(s): 22654
Problem Description
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。
Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
Sample Input
132
Sample Output
132
铺地板问题,第一时间想到了状压DP。于是敲了一发状压DP,AC了。
但是测试数据的时候,惊奇地发现这是一个斐波那契数列!
于是试着用递推去做。
我发现,2*n的地板,可以看做是2*(n-1)的地板加上一个竖放的一个2*1骨牌。也可以看成是一个2*(n-2)的地板加上两个横放的2*1骨牌。
所以,f(n)=f(n-1)+ f(n-2)
所以他是个斐波那契数列。
两个代码都AC了,要注意的是,斐波那契数列增长速度很快,要用long long。
状压DP AC代码:
#include<stdio.h>#include<cstring>typedef long long ll;const ll H=1<<2;const int m=2;ll dp[55][H];bool check(int k,int m);void searchs(int n,int m);int main(){ int n; while(~scanf("%d",&n)) { searchs(n,m); printf("%lld\n",dp[n+1][0]); } return 0;}void searchs(int n,int m){ int W=(1<<m)-1; memset(dp,0,sizeof(dp)); dp[1][0]=1; for(int i=1;i<=n;i++) { for(int j=0;j<=W;j++) { for(int k=0;k<=W;k++) { if(((j&k)==0)&&check(j|k,m)) { dp[i+1][j]+=dp[i][k]; } } } } return;}bool check(int k,int m){ for(int i=0;i<m;) { if((k&(1<<i))==0) { if(i==m-1) { return 0; } if((k&(1<<(i+1)))!=0) { return 0; } i+=2; } else { i++; } } return 1;}
斐波那契数列AC代码:
#include<stdio.h>#include<cstring>using namespace std;long long fei[66];int main(){ fei[0]=1; fei[1]=1; for(int i=2;i<55;i++) { fei[i]=fei[i-1]+fei[i-2]; } int n; while(~scanf("%d",&n)) { printf("%lld\n",fei[n]); } return 0;}
0 0
- HDU 2046 骨牌铺方格(斐波那契递推 或者 状压DP)
- hdoj 2046 骨牌铺方格 【DP】+【斐波那契】
- hdu 2046 骨牌铺方格(递推 斐波那契数列)
- hdu 2046 骨牌铺方格(简单dp)
- hdu 2046 骨牌铺方格(Fibonacci)
- hdu 2046骨牌铺方格
- hdu 2046骨牌铺方格
- HDU--2046骨牌铺方格
- HDU 2046 骨牌铺方格
- hdu 2046 骨牌铺方格
- HDU-2046骨牌铺方格
- HDU 2046 骨牌铺方格
- HDU 2046 - 骨牌铺方格
- HDU 2046骨牌铺方格
- HDU 2046 骨牌铺方格。
- HDU 2046 骨牌铺方格
- [hdu-2046] 骨牌铺方格
- HDU 2046 骨牌铺方格
- Yii 框架 ajax的使用
- JZOJ4867【NOIP2016提高A组集训第8场11.5】心理学概论
- eclipse配置外部工具利用javah一键生成头文件
- spring+springmvc+mybatis+angularjs java web项目
- 【十八】线性二次型调节控制
- HDU 2046 骨牌铺方格(斐波那契递推 或者 状压DP)
- 在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
- 第二十二讲项目4-分支嵌套流程图【五级成绩】
- 【python】Linux服务器下安装python 的 MySQLdb 以及常见报错解决
- elasticsearch zen发现
- 数据库学习笔记和小练习(5)视图
- 20161105提高A组总结
- html form表单提交后不刷新不跳转的实现方法------
- 怎么根据程序读到的ADC值,推算实际电压值?