POJ3254 Corn Fields(状态压缩DP)
题目链接。
分析:
作为状态压缩DP入门题,很好。
由题意可知:
1.任意两牛(包括行和列)不能临近
2.牛只能在有草的即值为1的地方
3.不放牛也为一种方案
定义dp[i][s]为第i行状态s下的方案数。
dp[i][s] = ∑(dp[i-1][s']),其中s'为不与s冲突的状态
注意:
因为位运算优先级很低,所以要多加括号。因此
if((cow & (cow<<1)) != 0) return 0; 和 if(cow & (cow<<1) != 0) return 0; 是不一样的
#include <cstdio> #include <cstring>#define MAXN 13 #define MODNUM 100000000int n, m; int filter[MAXN]; int dp[MAXN][1<<MAXN];int check(int cow, int grass){if((cow & grass) != cow) return 0; //检测牛是否都在有草的地方,如果否返回0if((cow & (cow<<1))) return 0; //该行是否有两牛相邻,有就返回0return 1; }void solve(){int i, j, itype, k, ans;memset(dp, 0, sizeof(dp));dp[0][0] = 1;itype = (1<<m);for(i=1; i<=n; i++){for(j=0; j<itype; j++){if(check(j, filter[i])){for(k=0; k<itype; k++){if((j&k) == 0){ //保证对于该行j状态与上一行k状态,两行间没有临近的牛dp[i][j] = (dp[i][j] + dp[i-1][k]) % MODNUM;}}}}}ans = 0;for(i=0; i<itype; i++){ans = (ans+dp[n][i]) % MODNUM;}printf("%d\n", ans); }int main(){int i, j, t;scanf("%d %d", &n, &m);for(i=1; i<=n; i++){filter[i] = 0;for(j=0; j<m; j++){scanf("%d", &t);filter[i] = (filter[i]<<1)+t; //将每行草地用二进制表示 }}solve();return 0; }
转载于:https://www.cnblogs.com/tanhehe/archive/2013/04/11/3014334.html
POJ3254 Corn Fields(状态压缩DP)相关推荐
- poj 3254 Corn Fields 状态压缩dp
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Description Farmer John has purchased a ...
- 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://poj.org/problem?id=3254 思路见代码: #include<iostream> using namespace std;const int MOD= ...
- poj3254 Corn Fields 状压DP入门
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19368 Accepted: 10169 Des ...
- POJ 3254 Corn Fields (状态压缩)
刚开始的思路是 把0-2^x的 所有状态枚举, 然后找符合条件的, 但是 发现 当12*12 时 1的数量x 超过64 这是个庞大的数字, 跟本就没法枚举: 想到用状态压缩, 但是 怎么压 ...
- POJ3254Corn Fields——状态压缩dp
题目:http://poj.org/problem?id=3254 1.枚举行: 2.把有影响的"放不放牛"加入参数中,用二进制数表示该位置放不放牛,再用十进制数表示二进制数: 3 ...
- 状态压缩dp入门 第一题 POJ 3254 Corn Fields
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6460 Accepted: 3436 Descr ...
- 状态压缩DP(大佬写的很好,转来看)
奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- [POJ3254]Corn Fields
[POJ3254]Corn Fields 试题描述 Farmer John has purchased a lush new rectangular pasture composed of \(M\) ...
最新文章
- linux 运维shell习题
- python朋友圈表白_情人节「告白生成器」来了!这个AI能让偶像对你说情话,过于真实!...
- 留言条.html .js来完成
- 老弟做了个网盘,炸了!
- python3.7怎么安装turtle_python3绘图程序教学:载入和查询Turtle模组(一)
- matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码...
- GPS开发、定位修改
- 深度学习声纹识别_一种基于机器学习及深度学习的声纹降噪方法及系统与流程...
- 西门子1200控制V90伺服,西门子1200通过PN通讯控制 V90伺服,程序控制采用FB285功能块
- 项目中统一日志文件配置
- 论文笔记Understanding and Diagnosing Visual Tracking Systems
- 网络复现之基于TPS的STN网络
- 本科操作系统学习笔记(上篇)
- Vue3+Quasar实现ins风格图片墙
- 计算机操作系统实训心得总结,计算机操作系统安全实训心得总结
- 学习 FPGA 经验与书籍分享。
- cmmi3级认证有什么要求?参与人员都有哪些
- 树莓派与声音传感器 python
- Qt TCP/IP语音
- 使用jdk查看jks文件信息