POJ 3254 Corn Fields (状态压缩DP)
题意:在由方格组成的矩形里面种草,相邻方格不能都种草,有障碍的地方不能种草,问有多少种种草方案(不种也算一种方案)。
分析:方格边长范围只有12,用状态压缩dp好解决。
预处理:每一行的障碍用一个状态保存好 每一行不考虑障碍的所有符合要求的状态保存好 第一行的方案数记录好。
然后一行一行递推,每一行只与上一行有关。
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 100005
#define INF 0x7FFFFFFF
#define mod 100000000
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std; int map[15][15];
int dp[15][1 << 12];
int buff[1 << 12]; //保存每一行不考虑障碍的状态
int bar[15]; //保存每一行的障碍的状态
int n,m,sum,ans; void getbuff() {
int total = 1 << m;
for(int i=0; i<total; i++) {
if(i & (i >> 1)) continue;
buff[sum++] = i;
}
} void solve() {
for(int i=1; i<n; i++) {
for(int j=0; j<sum; j++) {
if(buff[j] & bar[i]) continue;
for(int k=0; k<sum; k++) {
if(buff[j] & buff[k]) continue;
if(buff[k] & bar[i-1]) continue; //注意也要判冲突与否
dp[i][buff[j]] = (dp[i][buff[j]] + dp[i-1][buff[k]]) % mod;
}
}
}
ans = 0;
for(int j=0; j<sum; j++) {
ans = (ans + dp[n-1][buff[j]]) % mod;
}
}
int main(){
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
memset(bar,0,sizeof(bar));
sum = 0;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
scanf("%d",&map[i][j]);
if(map[i][j] == 0) {
int move = m - j - 1;
bar[i] += 1 << move;
}
}
}
getbuff();
for(int j=0; j<sum; j++) {
if(buff[j] & bar[0]) continue; // 注意
dp[0][buff[j]] = 1;
}
solve();
printf("%d\n",ans);
return 0;
}
POJ 3254 Corn Fields (状态压缩DP)的更多相关文章
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- POJ 3254 Corn Fields 状态压缩DP (C++/Java)
id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...
- poj - 3254 Corn Fields (状态压缩dp入门)
http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...
- POJ 3254 Corn Fields状态压缩DP
下面有别人的题解报告,并且不止这一个状态压缩题的哦···· http://blog.csdn.net/accry/article/details/6607703 下面是我的代码,代码很挫,绝对有很大的 ...
- [ACM] POJ 3254 Corn Fields(状态压缩)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8062 Accepted: 4295 Descr ...
- poj 3254 Corn Fields 国家压缩dp
意甲冠军: 要在m行n陆行,有一些格您可以种树,别人做不到的.不相邻的树,我问了一些不同的共同拥有的法律. 分析: 从后往前种,子问题向父问题扩展,当种到某一格时仅仅有他和他后面的n-1个格子的情况对 ...
- POJ 3254 Corn Fields 状态压缩
这题对我真的非常难.实在做不出来,就去百度了,搜到了一种状压DP的方法.这是第一种 详细见凝视 #include <cstdio> #include <cstring> #in ...
- poj 3254 Corn Fields_状态压缩dp
感谢:http://www.cnblogs.com/ka200812/archive/2011/08/11/2135607.html 让我搞懂了. #include <iostream> ...
随机推荐
- codesmith的使用
新建一个C#模版. model类的模版代码如下: <%-- Name: 模型层代码生成模版 Author: XX Description: 根据数据库的内容生成模型层代码 Version: V1 ...
- 一个打砖块的小游戏1.0 KILL THE BLOCKS !
/******************************************** * 程序名称:MR.DUAN 的打砖块(KILL THE BLOCKS !) * 作 者:WindAutum ...
- congos 日期控件的简单使用
congos 添加html的标签,然后写上js的代码,这段代码的功能是得到前一天的日期. <input type="button" value="查询" ...
- telnet与tnsping
在cmd 下面 tnsping ZCGL ZCGL这个是在oracle做好的数据库连接. telnet IP地址 加上端口号. 查看视图的编写语句 select dbms_metadata.get_d ...
- 武汉科技大学ACM :1006: 华科版C语言程序设计教程(第二版)习题7.15
Problem Description 输入n个字符串(n<=100),输出其中最长的串,如果有多个则取最先找到的那一个. Input 多组测试数据. 每组测试数据第一行包含一个整数n,表示一共 ...
- span里设置高度
众所周知,SPAN元素内单纯设置height是没有效果的. 需要设置SPAN的高度,需要将其设置成block元素. display:block 但这样会导致span占据了整一行,我们通常不希望这样. ...
- GET——token
private function get_token(){ $appid="wx4dae5d61b7f9935c"; $appSecret="24a91315a1a62a ...
- 添加view类图中的二级菜单
void CFafdsafasdfasfasView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message han ...
- 浏览器d判断
1.判断浏览器类型 if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAge ...
- smarty 练习: 分页查询
对查出的数据进行分页,并添加查询 在main.php和main.html两个页面操作: 后台:main.php <?php include("../init.inc.php" ...