HDU 1992
2016-01-25 18:58
176 查看
思路:灵感来自于数字逻辑时序电路的状态转移法,具体如下:
1. 状态编码:设待补充部分为:col列加上余列X,其中X有0000、1100、0011、0110、1001五种状态(1表示有,0表示无),进一步状态压缩为0-4五个数;
2. 状态转移:通过递归
3. 注意:为保证效率,使用动态规划
1. 状态编码:设待补充部分为:col列加上余列X,其中X有0000、1100、0011、0110、1001五种状态(1表示有,0表示无),进一步状态压缩为0-4五个数;
2. 状态转移:通过递归
3. 注意:为保证效率,使用动态规划
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; const int M[5][5] = { {3, 1, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 1}, {0, 0, 0, 1, 0} }; int DP[1000][5]; // DP[i][j]表示拼成【i列加上j对应的余列】的情况数 int W; int DFS(int col, int state) { if(col == 0 && state == 0) return 1; if(col <= 0) return 0; int& ans = DP[col][state]; if(ans > 0) return ans; for(int i = 0; i < 5; i++) { if(M[state][i]) { ans += DFS(col-1, i); if(M[state][i] == 3) ans += DFS(col-2, i); } } return ans; } int main() { memset(DP, 0, sizeof(DP)); DFS(1000, 0); int T; scanf("%d", &T); for(int kase = 1; kase <= T; kase++) { printf("%d ", kase); scanf("%d", &W); printf("%d\n", DFS(W, 0)); } }
相关文章推荐
- ASP编码必备的8条原则
- C#使用DeflateStream解压缩数据文件的方法
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- C#调用WinRar执行rar、zip压缩的方法
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- C语言安全编码之数值中的sizeof操作符
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- VC中BASE64编码和解码使用详解
- 计算机中的字符串编码、乱码、BOM等问题详解
- C#实现页面GZip或Deflate压缩的方法
- C#使用iCSharpcode进行文件压缩实现方法
- Base64编码解码原理及C#编程实例
- C#编码好习惯小结
- C#实现压缩HTML代码的方法
- Asp.net在线备份、压缩和修复Access数据库示例代码
- javascript编码的几个方法详细介绍
- 使用UglifyJS合并/压缩JavaScript的方法