poj3254:Corn Fields(状压DP)
来源:互联网 发布:js按钮current trigger 编辑:程序博客网 时间:2024/05/20 10:15
传送门
题意:
有一片
题解:
首先
1.无用状态很多,先把所有有用状态预处理。判断有用状态:
2.转移时把map压进int ,
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<vector>#include<map>#include<set>using namespace std;inline int read(){ char ch=getchar();int i=0,f=1; while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){i=(i<<1)+(i<<3)+ch-'0';ch=getchar();} return i*f;}const int mod=1e8;int n,m,mp[15],now;int dp[2][(1<<12)+50];int status[(1<<12)+50],tot;inline bool valid(int sta){ return (sta&(sta<<1))==0;}int main(){ n=read(),m=read(); for(int i=1;i<=n;i++) for(int j=0;j<m;j++) mp[i]|=((read()^1)<<j); int lim=(1<<m)-1; for(int i=0;i<=lim;i++) if(valid(i))status[++tot]=i; dp[now][1]=1; for(int i=1;i<=n;i++){ now^=1; for(int j=1;j<=tot;j++){ dp[now][j]=0; if(status[j]&mp[i])continue; for(int k=1;k<=tot;k++){ if(status[j]&status[k])continue; (dp[now][j]+=dp[now^1][k])%=mod; } } } int ans=0; for(int i=1;i<=tot;i++)(ans+=dp[now][i])%=mod; cout<<ans<<endl; return 0;}
阅读全文
0 0
- poj3254(Corn Fields)状压dp
- poj3254--Corn Fields(状压dp)
- poj3254 Corn Fields(状压dp)
- POJ3254-Corn Fields(状压DP)
- POJ3254:Corn Fields(状压dp入门)
- 【poj3254】Corn Fields(状压dp)
- Poj3254 Corn Fields (状压Dp)
- poj3254 Corn Fields(状压dp)
- POJ3254-Corn Fields(状压dp)
- poj3254:Corn Fields(状压DP)
- 【状压DP】Corn Fields POJ3254
- poj3254 Corn Fields 状压dp
- POJ3254-Corn Fields-状压DP
- poj3254 Corn Fields (状压dp)
- POJ3254 Corn Fields 【状压dp】
- POJ3254 Corn Fields(状压DP)
- POJ3254 Corn Fields(DP)
- 【DP】 poj3254 Corn Fields
- sqlserver游标小实例循环列表
- TP5 在模板读出Session值
- MAVEN POM.xml 标签详解
- js定时器
- Spring MVC json基础工具类
- poj3254:Corn Fields(状压DP)
- Springboot系列:@SpringBootApplication注解
- keil C51 模拟堆栈,可重入函数调用,参数传递
- MySQL性能优化的最佳20+条经验
- python里使用正则表达式的search()函数实现指定位置搜索
- hdu1521排列问题
- 编辑距离算法(LD)详解
- JavaEE基础之冒泡排序
- Android性能优化的几个方面