【动态规划】覆盖墙壁
来源:互联网 发布:中国网络经纪人下载 编辑:程序博客网 时间:2024/05/16 23:57
这道题,标程的方法很简单,枚举最后一列,分成3种情况,即上,下,上下。
只有上和只有下的情况是完全对称的,所以简化成一种情况,直接乘以二就够了。分别由两种方法递推过来,如上左图。
上下都有的情况可以由四种方法递推过来,如上右图。
只有上下的我们用g[i]表示,上下都有用f[i]表示。
明显,f[i] = f[i-1]+f[i-2]+2*g[i-1]。g[i]=g[i-1]+f[i-2]
#include <cstdio>long f[1000010];long g[1000010];int main(){freopen("wall.in","r",stdin);freopen("wall.out","w",stdout);long n;scanf("%ld",&n);f[1] = 1;f[2] = 2;g[1] = 0;g[2] = 1;for (long i=3;i<n+1;i++){f[i] = (f[i-1]+f[i-2]+2*g[i-1])%10000;g[i] = (g[i-1]+f[i-2])%10000;}printf("%ld",f[n]);return 0;}
方法二:
f[i][0] = f[i-2][1] + f[i-2][2]
f[i][1] = f[i-2][1] + f[i-1][1] + f[i-1][0] + f[i-2][2]
f[i][2] = f[i][0] + f[i-1][1]
#include <cstdio>long f[1000010][3];int main(){freopen("wall.in","r",stdin);freopen("wall.out","w",stdout);long n;scanf("%ld",&n);f[1][1] = 1;f[1][0] = 0;f[1][2] = 0;f[2][1] = 2;f[2][0] = 1;f[2][2] = 1;for (long i=3;i<n+1;i++){f[i][0] = (f[i-2][1] + f[i-1][2])%10000;f[i][1] = (f[i-2][1] + f[i-1][1] + f[i-1][0] + f[i-1][2])%10000;f[i][2] = (f[i-2][1] + f[i-1][0])%10000;}printf("%ld",f[n][1]);return 0;}
- 【动态规划】覆盖墙壁
- 【递推】【动态规划】【数列】第二题 覆盖墙壁(wall.pas/c/cpp)
- P1990 覆盖墙壁
- 【 u234】覆盖墙壁
- 线段覆盖(动态规划)
- codevs线段覆盖 动态规划
- 动态规划11:矩形覆盖
- 【动态规划】[luoguP1791]线段覆盖
- luogu 1990 覆盖墙壁 (状压dp)
- 线段覆盖2(动态规划)
- 【Unity】动态生成的墙壁为什么穿透
- 线段覆盖(序列动态规划+离散化)
- 百炼2791-矩形覆盖-C语言-动态规划
- 1665:完美覆盖(4.5算法之动态规划)
- 动态规划!!!动态规划!!!
- 状态压缩动态规划 POJ 2411 (编程之美-瓷砖覆盖地板)
- 状态压缩与动态规划(DP)---编程之美---瓷砖覆盖地板---POJ2411
- 状态压缩动态规划 POJ 2411 (编程之美-瓷砖覆盖地板)
- 简述HTTP网络协议工作原理的流程
- vsftpd服务器的安装与详解
- boost源码剖析之:多重回调机制signal(上)
- 常见的数组问题
- js控制表单不能输入空格
- 【动态规划】覆盖墙壁
- PHP self parent
- 面试题7答案
- 1.黑马程序员-HelloWorld!
- Web打印的解决方案之普通报表打印
- 【mysql】mysql中需要注意的几个sql语句
- Struts2通过实体传递参数
- mysql Error 0错误
- Oracle学习动态性能表