【题解】洛谷P1879 [USACO06NOV] Corn Fields(状压DP)
洛谷P1879:https://www.luogu.org/problemnew/show/P1879
思路
把题目翻译成人话
在n*m的棋盘 每个格子不是0就是1
1表示可以种 0表示不能种 相邻的格子不能同时种 求总方案数
把每行看成一个n位的2进制数 预处理出每行的状态后 进行DP即可
PS:在处理每行的初始状态时 将其取反后更好操作
代码
#include<iostream>
#include<cstdio>
using namespace std;
#define mod 100000000
int f[][];
int n,m,ans;
struct State
{
int st[];
int num;
}a[];
void getstate(int i,int t)
{
int num=;//记录此行有几种状态
for(int j=;j<(<<n);j++)//枚举所有状态
{
if((j&t)||(j&(j<<))||(j&(j>>))) continue;//如果冲突就跳过
a[i].st[++num]=j;//记录状态
a[i].num=num;
}
}
void dp()
{
for(int i=;i<=a[].num;i++) f[][i]=;//初始化
for(int i=;i<=m;i++)//枚举行
{
for(int j=;j<=a[i].num;j++)//枚举第i行的状态
{
f[i][j]=;
for(int k=;k<=a[i-].num;k++)//枚举第i-1行的状态
{
if(a[i].st[j]&a[i-].st[k]) continue;//如果冲突就跳过
f[i][j]+=f[i-][k];//累计ans
}
}
}
for(int i=;i<=a[m].num;i++)
ans=(ans+f[m][i])%mod;//累计第m行的所有状态的ans
printf("%d",ans);
}
int main()
{
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++)
{
int t=;//处理当前行的状态
for(int j=;j<=n;j++)
{
int x;
cin>>x;//这里对输入进行取反操作
t=(t<<)+-x;//如1010 存成0101 方便后面判断状态
}
getstate(i,t);//获得此行状态
}
dp();
}
【题解】洛谷P1879 [USACO06NOV] Corn Fields(状压DP)的更多相关文章
- P1879 [USACO06NOV]玉米田Corn Fields 状压dp/插头dp
正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ...
- 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)
洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...
- [USACO06NOV]玉米田Corn Fields 状压DP
题面: 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他的 ...
- [USACO06NOV]玉米田Corn Fields (状压$dp$)
题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...
- POJ 1684 Corn Fields(状压dp)
描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...
- POJ 3254 - Corn Fields - [状压DP水题]
题目链接:http://poj.org/problem?id=3254 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John ...
- 【POJ3254】Corn Fields 状压DP第一次
!!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...
- 洛谷 P1278 单词游戏 【状压dp】
题目描述 Io和Ao在玩一个单词游戏. 他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致. 游戏可以从任何一个单词开始. 任何单词禁止说两遍,游戏中只 ...
- POJ 3254 Corn Fields (状压dp)
题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻.问有多少种情况. 状压dp入门题,将可以种菜的状态用一个数的二进制表 ...
随机推荐
- hibernate cascade的真正含义
hibernate cascade 是 @OneToOne @OneToMany @ManyToOne @ManyToMany等注解的属性,表示级联操作. /** * (Optional) The o ...
- 设置$.getJSON同步执行的笨方法
$.ajaxSettings.async=false; $.getJSON("action/logon_checkAcc.action", function(json){ aler ...
- Springboot事务使用与回滚
Springboot中事务的使用: 1.启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的). 2.在使用事务的public(只有public支持事 ...
- IOC和DI到底是什么?
在学习Spring框架的时候,我们总是能见到IOC这个单词,也时常听到DI这个词,那么他们分别是什么意思呢?接下来就讲讲个人对于这两个概念的理解 一.IOC和DI概念 IOC(控制反转):全称为: ...
- jsp实现html页面静态化
一.实现原因 1.网站访问量过大,导致服务器压力加大以及数据库数据交换频繁.生成静态页面提供访问以缓解压力. 2.静态页面是动态页面的备份,若动态页面出现异常,静态页面可以暂时替代. 二.使用场合 ...
- 提高 GitHub 网页访问速度 以及 Git Clone 速度 的小技巧
参考: http://www.cnblogs.com/mico-liu/p/9303817.html https://blog.csdn.net/qq756684177/article/details ...
- c++中%是什么意思?
两种意思:1.格式化字符串输出2.整数取余 1.目前printf支持以下格式的输出,例如:printf("%c",a):输出单个字符.printf("%d",a ...
- JSON中的安全问题
Web中使用JSON时最常见的两个安全问题: 1.跨站请求伪造: 即CSRF,是一种利用站点对用户浏览器信任发起攻击的方式.典型的就是JSON数组,更多信息请自行上网百度. 2.跨站脚本攻击. 是注入 ...
- 如何为Android平台编译 opencv3 和 opencv_contrib (Linux)
编译出来的opencv库有问题,正在调试中 ...... 本文以编译opencv 3.3.0 和 opencv_contrib 3.3.0为例,系统为 Linux x64 (Fedora 21),具体 ...
- Rabbit MQ config文件解析
Rabbit MQ config文件解析 tcp_listeners:用于监听AMQP连接的端口或主机名/对(不带TLS),默认端口:5672 2.numtcpacceptors :将接受TCP侦听器 ...