题目链接

题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)

分析:每一行看做一个状态,用一个二进制数来表示,每一行会排出牛和牛相邻的情况;由上一行转移到下一行的条件就是这一行和上一行不会存在1在同一列,也就是与操作后为0,

状态表示: dp[state][i] 表示 在状态为state情况下第i行可以满足的方案数

状态转移:DP[state][i] += dp[state'][i - 1] (state & state' == 0)

状态压缩总结博客

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int Mod = ;
int state[];
int dp[][], cur[];
int n, m, total, top;
inline bool is_ok(int x)
{
if (x & (x << )) // 如果存在相邻的1返回0
return ;
return ;
}
void init()
{
top = ;
total = << n;
for (int i = ; i < total; i++)
if(is_ok(i))
state[++top] = i;
}
inline bool fit(int x, int i)
{
if (x & cur[i])
return ;
return ;
}
int main()
{
while (scanf("%d%d", &m, &n) != EOF)
{
init();
int num;
for(int i = ; i <= m; i++)
{
cur[i] = ;
for(int j = ; j <= n; j++)
{
scanf("%d", &num);
if (num == )
cur[i] += ( << (n - j));
//这里之前不明白为什么num == 0的时候开始计数,把不允许放牧的地方都设为1,而允许放牧的就是0,所以判断当前状态与哪些标准状态匹配时候只需判断 & 之后是否为0,因为只要是非0,一定是不行的,在那一个点下不允许放牧,标准却可以放牧。 当前状态可以放牧,即为0,那么标准状态下,这一个位置放不放都可以,所以标准下0,1都可以
}
}
memset(dp, , sizeof(dp));
for (int i = ; i <= top; i++)
{
if (fit(state[i], )) // 先判断第一行的情况,state[1] = 0,这也是可以的
dp[][i] = ;
} for (int i = ; i <= m; i++)
{
for(int k = ; k <= top; k++) // 判断第 i 行可以由哪些标准状态
{
if(!fit(state[k], i)) continue;
for (int j = ; j <= top; j++)
{
if(!fit(state[j], i - )) continue; //选择i-1可以的标准状态
if (state[k] & state[j]) continue; // 没有列相邻的1
dp[i][k] += dp[i - ][j];
dp[i][k] %= Mod;
}
}
}
int ans = ;
for (int i = ; i <= top; i++)
{
ans += dp[m][i];
ans %= Mod;
}
printf("%d\n", ans);
}
return ;
}

POJ3254Corn Fields(状态压缩DP入门)的更多相关文章

  1. poj - 3254 Corn Fields (状态压缩dp入门)

    http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...

  2. POJ3254Corn Fields——状态压缩dp

    题目:http://poj.org/problem?id=3254 1.枚举行: 2.把有影响的“放不放牛”加入参数中,用二进制数表示该位置放不放牛,再用十进制数表示二进制数: 3.优美的预处理lis ...

  3. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  4. POJ3254 - Corn Fields(状态压缩DP)

    题目大意 给定一个N*M大小的土地,土地有肥沃和贫瘠之分(每个单位土地用0,1来表示贫瘠和肥沃),要求你在肥沃的单位土地上种玉米,如果在某个单位土地上种了玉米,那么与它相邻的四个单位土地是不允许种玉米 ...

  5. POJ 3254 Corn Fields (状态压缩DP)

    题意:在由方格组成的矩形里面种草,相邻方格不能都种草,有障碍的地方不能种草,问有多少种种草方案(不种也算一种方案). 分析:方格边长范围只有12,用状态压缩dp好解决. 预处理:每一行的障碍用一个状态 ...

  6. POJ Corn Fields 状态压缩DP基础题

    题目链接:http://poj.org/problem?id=3254 题目大意(名称什么的可能不一样,不过表达的意思还是一样的): 种玉米 王小二从小学一年级到现在每次考试都是班级倒数第一名,他的爸 ...

  7. Hdu-1565 方格取数(1) (状态压缩dp入门题

    方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  8. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  9. poj Corn Fields 状态压缩dp。

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5763   Accepted: 3052 Descr ...

随机推荐

  1. [转]论acm与泡妞

    abstract :本文从各个方面讨论了泡妞与做题之间的相似之处与不同点,尽量的站在一个公平的角度阐述这一问题,所得的研究成果填补了国内外的理论空白. - 泡了一个好妞就好像做了一道难题一样快感都是相 ...

  2. 【CSS】 background

    background: #22b4ff //背景色 url("http://images.cnblogs.com/cnblogs_com/oiliu/529256/o_titleIMG.jp ...

  3. iOS- -安装cocopods

    已经不是第一次安装cocoapods了, 但是今天在自己的mac pro 安装cocoapods 出现了 Error installing pods:active support requires R ...

  4. Collection中Set集合在应用中常见的方法和注意点

    Set集合 : 元素无序的,元素不允许重复.      ---->HashSet  : 存值方式使用哈希表来存值的.                   原理 :  如果HashSet中存放对象 ...

  5. springMVC之AOP

    AOP(Aspect-Oriented Programming,面向切面编程) 切面(Aepect):横切关注点(跨越应用程序多个模块的功能)被模块化的对象: 通知(Advice):切面必须要完成的工 ...

  6. [转]SpringMVC+Hibernate+Spring 简单的一个整合实例

    原文地址:http://langgufu.iteye.com/blog/2088355 下面开始实例,这个实例的需求是对用户信息进行增删改查.首先创建一个web项目test_ssh,目录结构及需要的J ...

  7. Swift基础--通知,代理和block的使用抉择以及Swift中的代理

    什么时候用通知,什么时候用代理,什么时候用block 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了 代理 : 父子关系,监听 ...

  8. javascript原型Prototype【转】

    转自:http://www.cnblogs.com/starof/p/4190404.html 在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同 ...

  9. [cf621E]Wet Shark and Blocks

    Description 给定$n$个数和$b$个盒子,放一些数到盒子中,使得盒子不为空.每个盒子中的数是一样的,一个数可以被放到多个盒子中. 从每个盒子中取一个数,组成一个$b$位数,如果这个数$mo ...

  10. Android热身:通过网络获取资源并更新UI组件

    Android热身:通过网络获取资源并更新UI组件 目标 点击"发送请求"按钮,下载某网页的html源码,并显示在TextView控件上:点击"清空",清除Te ...