poj 2411 Mondriaan's Dream
2016-07-25 19:33
387 查看
人生第一个插头DP(基于轮廓线的状态压缩动态规划
虽然这个题好像有别的姿势,不过在学习了插头dp之后还是练习了一下
插头dp入门看 基于连通性状态压缩的动态规划问题这个课件就好就好
虽然这个题好像有别的姿势,不过在学习了插头dp之后还是练习了一下
插头dp入门看 基于连通性状态压缩的动态规划问题这个课件就好就好
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long const int bit= 12; const int maxn = 1<<bit; LL dp[bit][bit][maxn]; inline bool get(int x,int pos){ return (x>>pos)&1; } inline int sub(int x,int pos){ return x & (~(1<<pos)); } int main(){ int n,m; while(~scanf("%d %d",&n,&m) && (n||m)){ memset(dp,0,sizeof(dp)); int bnd = 1<<m; dp[0][m-1][bnd-1] = 1; for(int i=1;i<=n;i++){ for(int j=0;j<m;j++){ LL *pdp = !j ? dp[i-1][m-1]:dp[i][j-1]; for(int mask=0;mask<bnd;mask++){ if(get(mask,j)){ dp[i][j][mask] = pdp[sub(mask,j)]; if(j && get(mask,j-1)){ dp[i][j][mask] += pdp[sub(mask,j-1)]; } } else{ dp[i][j][mask] = pdp[mask | (1<<j)]; } } } } printf("%lld\n",dp [m-1][bnd-1]); } return 0; }
相关文章推荐
- 网卡配置文件生效
- java的this关键字
- HDU 4431 Mahjong(天津赛区亚洲区) 模拟题,方法很重要
- poj 1996多项式计算
- Hibernate 对象的三种状态 持久状态 临时状态 游离状态
- python3.5安装lxml库
- 选择排序
- HDOJ 1896 Stones(优先队列)
- ubuntu系统下更新jdk版本
- Word Ladder II 解题总结
- android输入框在软键盘的上面
- Github汇总
- DAO模式
- 使用FAAD库解码AAC实例及 及 faad解码后的通道数不正确的问题
- 关于几个小问题的解决方案
- malloc calloc realloc的函数原型和功能
- Android Volley完全解析(一),初识Volley的基本用法
- c语言基础
- 取样问题
- HDU 5739 Fantasia 2016多校