转载请注明出处:http://blog.csdn.net/a1dark

分析:刚开始学状压DP比较困难、多看看就发现其实也没有想象中那么难、这道题由于列数较小、所以将行压缩成二进制来看、首先处理第一行、先判断同一行中不能有相邻的1出现、然后判断1出现的位置要与题目中的不冲突、接下来就是转移了、从上一行转移到这一行、首先判断上下不能有1相邻、然后就是将上一行的状态转移到当前行、上一行的所有符合条件的状态的总的方案数就是当前行该状态的方案数、

#include <cstdio>
#include <cstring>
using namespace std;
#define mod 100000000
int M,N,top = 0;
int state[600],num[110];
int dp[20][600];
int cur[20];
bool ok(int x){//判断有没有连续的1
if(x&x<<1)return 0;
return 1;
}
void init(){
top = 0;
int total = 1 << N;//total种状态数
for(int i = 0; i < total; ++i){
if(ok(i))state[++top] = i;//如果满足状态就加入到state中
}
}
bool fit(int x,int k){//判断状态X是否与第K行状态冲突
if(x&cur[k])return 0;
return 1;
}
int main(){
while(scanf("%d%d",&M,&N)!= EOF){
init();//初始化
memset(dp,0,sizeof(dp));//初始化
for(int i = 1; i <= M; ++i){
cur[i] = 0;
int num;
for(int j = 1; j <= N; ++j){
scanf("%d",&num);
if(num == 0)cur[i] +=(1<<(N-j));
}
}
for(int i = 1;i <= top;i++){
if(fit(state[i],1)){//判断是否符合题目给定状态、
dp[1][i] = 1;
}
}
for(int i = 2; i <= M; ++i){
for(int k = 1; k <= top; ++k){
if(!fit(state[k],i))continue;//满足第I行和当前行的状态不冲突
for(int j = 1; j <= top ;++j){
if(!fit(state[j],i-1))continue;//满足第I-1行和上一行的状态不冲突、貌似可以不用
if(state[k]&state[j])continue;//相邻两行的对应位置的点的0,1状态不能相同
dp[i][k] = (dp[i][k] +dp[i-1][j])%mod;//从上一行转移到当前行
}
}
}
int ans = 0;
for(int i = 1; i <= top; ++i){
ans = (ans + dp[M][i])%mod;
}
printf("%d\n",ans);
}
}

动态规划晋级——POJ 3254 Corn Fields【状压DP】的更多相关文章

  1. POJ 3254 - Corn Fields - [状压DP水题]

    题目链接:http://poj.org/problem?id=3254 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John ...

  2. POJ 3254 Corn Fields (状压dp)

    题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻.问有多少种情况. 状压dp入门题,将可以种菜的状态用一个数的二进制表 ...

  3. [ An Ac a Day ^_^ ] POJ 3254 Corn Fields 状压dp

    题意: 有一块n*m的土地 0代表不肥沃不可以放牛 1代表肥沃可以放牛 且相邻的草地不能同时放牛 问最多有多少种放牛的方法并对1e8取模 思路: 典型的状压dp 能状态压缩 能状态转移 能状态压缩的题 ...

  4. Poj - 3254 Corn Fields (状压DP)(入门)

    题目链接:https://vjudge.net/contest/224636#problem/G 转载于:https://blog.csdn.net/harrypoirot/article/detai ...

  5. poj 3254 Corn Fields 状压dp入门

    题目链接 题意 在\(M\times N\)的\(0,1\)格子上放东西,只有标记为\(1\)的格子可以放东西,且相邻的格子不能同时放东西.问有多少种放法. 思路 参考:swallowblank. \ ...

  6. POJ 1684 Corn Fields(状压dp)

    描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...

  7. POJ 3254 Corn Fields (状压入门)

    Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M≤ 12; 1 ≤ N ≤ 12) ...

  8. 【POJ3254】Corn Fields 状压DP第一次

    !!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...

  9. P1879 [USACO06NOV]玉米田Corn Fields 状压dp/插头dp

    正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ...

随机推荐

  1. 赋值,copy和deepcopy

    python的复制,拷贝,和深拷贝. >>> a=[23,3]>>> b=a>>> b.append(234)>>> a[23, ...

  2. Linux系统、版本、CPU、内存查看、硬盘空间

    查看系统版本:lsb_release -a [root@localhost /]# lsb_release -a LSB Version:    :core-4.0-amd64:core-4.0-no ...

  3. dedecms 发布文章时,关键字会自动加内链

    在后台找到:核心->批量维护->文档关键词维护 把关键字和链接网址删掉就可以了,生成更新后前端页面就不会再链接了.>_<.

  4. Nopcommerce架构浅谈之文件结构

    应该是在两年前了,在拜读园子里大神的文章时偶然了解到有个叫NopCommerce的商城系统,苦于没有时间,各种耽误,其中研究过一段时间,也就是一个星期时间,后来又耽搁了,直到最近,随着项目进入间歇期, ...

  5. gcc将多个静态库链接成一个静态库

    参考:https://sourceware.org/binutils/docs/binutils/ar-scripts.html#ar-scripts makefile如下: ARSCRIPT=scr ...

  6. hdu 5063 Operation the Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=5063 思路:因为3查询最多50,所以可以在查询的时候逆操作找到原来的位置,然后再求查询的值. #include ...

  7. ♫【JS模式】偏函数

    <深入浅出Node.js> var toString = Object.prototype.toString var isType = function(type) { return fu ...

  8. Qt入门(12)——Qt国际化

    应用的国际化就是使应用成为能被非本国的人使用的过程.有的情况下,国际化很简单,例如,使一个US应用可被Australian或者British用户理解,工作可能少于几个拼写修正.但是使一个US应用可以被 ...

  9. Tomcat死机报OutOfMemoryError: PermGen space错误

    最近,用户没怎么使用系统,页面就卡死,访问不了.仔细一看是Tomcat假死,好几次都这样.重启也慢的很,很着急.最后,看了下 conf/logs 里的配置文件,发现是 OutOfMemoryError ...

  10. C/C++常用算法【C语言顺序查找(随机数)】【1】

    这是我学习唐峻,李淳的<C/C++常用算法第一天> 1.8.1. 查找数字: 程序随机生成一个拥有20个整数数据的数组,然后输入要查找的数据.接着,可以采用醉简单的逐个对比的方法进行查找, ...