poj 3254 Corn Fields 状态压缩dp
来源:互联网 发布:nginx tomcat负载均衡 编辑:程序博客网 时间:2024/06/04 18:08
题意:
给一块m行n列的土地,有一些格可以种树,另外一些不可以,树不能相邻,问一共有多少种种法。
分析:
从后往前种,子问题向父问题扩展,当种到某一格时只有他和他后面的n-1个格子的情况对它有影响,故对这n个格子进行编码为状态S,表示种完(多米诺骨牌那题是放置前,注意区别,都可行)这n个格子的状态。父问题由稍小子问题逐步解决,正是动态规划的思想。
代码:
//poj 3254//sep9#include <iostream>using namespace std;const int maxN=14;const int mod=100000000;int land[maxN][maxN];int dp[2][1<<maxN];int m,n;int main(){scanf("%d%d",&m,&n);int i,j,used;for(i=0;i<m;++i)for(j=0;j<n;++j)scanf("%d",&land[i][j]);int *cur=dp[0],*nxt=dp[1];cur[0]=1;for(i=m-1;i>=0;--i)for(j=n-1;j>=0;--j){for(used=0;used<1<<n;++used){if(land[i][j]==0){if(used>>j&1)nxt[used]=0;else{nxt[used]=cur[used];nxt[used]+=cur[used|(1<<j)];nxt[used]%=mod;}}else{int res=0;if((used>>j&1)&&(used>>(j+1)&1)){res=0;}else if(!(used>>j&1)&&(used>>(j+1)&1)){res=cur[used];res+=cur[used|(1<<j)];}else if((used>>j&1)&&!(used>>(j+1)&1)){res=cur[used&(~(1<<j))];}else if(!(used>>j&1)&&!(used>>(j+1)&1)){res=cur[used];res+=cur[used|(1<<j)];}nxt[used]=res%mod;}} swap(cur,nxt);}int sum=0;for(int i=0;i<1<<n;++i){sum+=cur[i];sum%=mod;}printf("%d",sum);return 0;}
0 0
- poj 3254 Corn Fields //状态压缩DP
- POJ 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields(状态压缩dp)
- POJ 3254 Corn Fields (状态压缩DP)
- poj-3254-Corn Fields-状态压缩DP
- poj 3254 Corn Fields (状态压缩DP)
- POJ 3254 Corn Fields (状态压缩DP)
- POJ 3254 Corn Fields(状态压缩dp)
- POJ 3254 Corn Fields 状态压缩dp
- POJ 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields ,状态压缩DP
- poj Corn Fields 3254 状态压缩dp
- poj 3254 Corn Fields (状态压缩DP)
- poj 3254 Corn Fields 状态压缩dp
- poj 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields (状态压缩dp)
- poj-3254 Corn Fields 状态压缩dp
- poj 3254Corn Fields(状态压缩dp)
- pchip和spline区别
- 插值与拟合 课件链接
- 内部类
- Java基础视频教程第09天_面向对象之内部类、异常1
- C++ The Bisection Method
- poj 3254 Corn Fields 状态压缩dp
- 为什么要学习Numerical Analysis
- 使用UltraISO制作U盘Win7安装盘,出现"File not find /BOOT/CDMENU.EZB.ezb"错误
- my journey of developing iOS app begins
- HDU 1686--Oulipo【KMP】
- Matlab The Bisection Method
- Linux下制作系统启动U盘
- 错误总结2
- 二分法 具体操作