动态规划—Problem L
2016-05-03 14:08
316 查看
动态规划—Problem L
题意
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,求出铺放方案的总数。
解题思路
递推,假设用dp[i]表示2*i的方格一共有组成的方法数,我们已知dp[1]=1,dp[2]=2。现在假设我们已经知道了dp[i-1]和dp[i-2],再求dp[i],不过是在2*(i-1)的格子后边加上一格2*1的方格罢了,骨牌在这一格上横着放,竖着放,如果前面i-1块已经铺好,则第i块只有一种铺法,就是竖着放,如果要横着放,也只有一种铺法,不过要求前面i-2块已经铺好。所以,递推公式就是dp[i]=dp[i-1]+dp[i-2];按照此公式求解即可。
感想
方法按理说应该没问题,但第一次提交时WA了,想不出原因下参考了下网上的说法竟然是数组类型的问题然后索性试了下改成long long int 类型,结果就AC了。
AC代码
题意
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,求出铺放方案的总数。
解题思路
递推,假设用dp[i]表示2*i的方格一共有组成的方法数,我们已知dp[1]=1,dp[2]=2。现在假设我们已经知道了dp[i-1]和dp[i-2],再求dp[i],不过是在2*(i-1)的格子后边加上一格2*1的方格罢了,骨牌在这一格上横着放,竖着放,如果前面i-1块已经铺好,则第i块只有一种铺法,就是竖着放,如果要横着放,也只有一种铺法,不过要求前面i-2块已经铺好。所以,递推公式就是dp[i]=dp[i-1]+dp[i-2];按照此公式求解即可。
感想
方法按理说应该没问题,但第一次提交时WA了,想不出原因下参考了下网上的说法竟然是数组类型的问题然后索性试了下改成long long int 类型,结果就AC了。
AC代码
#include<iostream> using namespace std; #define MAX 55 int main() { long long int dp[MAX]; int num; dp[1]=1;dp[2]=2; for(int i=3;i<=50;i++) dp[i]=dp[i-1]+dp[i-2]; while(cin>>num) { cout<<dp[num]<<endl; } return 0; }
相关文章推荐
- PyQt5——安装Eric6
- php语法
- 转,volley
- zabbix 添加主机成功失败判断
- zabbix 添加主机成功失败判断
- vsftp
- 百度内部发文:无意也不会逃避责任 号召员工继续用心上班
- 百度内部发文:无意也不会逃避责任 号召员工继续用心上班
- 计算机病毒常识
- Linux常用命令
- 监听器
- MongoDB插入文档
- How do I keep my driver from running out of kernel-mode stack
- git clean(转载)
- 红黑树的经典讲解
- SubVersion服务安装设置
- 本周汇总
- SAP HANA中调试存储过程
- MongoDB删除数据库
- 关于web自动化测试的一些自己的思考和总结