【题解】洛谷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入门题,将可以种菜的状态用一个数的二进制表 ...
随机推荐
- jxls实现基于excel模板的报表
此文章是基于 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 一. jar包介绍 1. commons-collections-3.2.jar 2. commo ...
- HDU-3790 最短路最小花费
判断路径相等时的情况 #include <iostream> #include <cstring> #include <algorithm> #include &l ...
- 运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
这是服务没安装,到tomcat的bin目录下运行 service.bat install 即可
- IndexedDB(一:基本使用)
在HTML5本地存储--Web SQL Database提到过Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了 Web Storage(Local Stora ...
- js判断值是否是数字
js如何判断值是否是数字 1. isNaN()方法2. 正则表达式var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$ ...
- centos yum安装常用命令
安装killall命令 yum install -y psmisc 安装sz(下载)和rz(上传)命令 yum install -y lrzsz 安装 ifconfig 命令 yum install ...
- Memcache 学习笔记(一)----Memcache — Linux部署
Memcache 一.Memcache简介(内容摘自 --百度百科) memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以 ...
- 个人发现的createProcess调用漏洞
现在的杀毒软件都会杀掉c盘下的program.exe程序,所以某种意义上而言,这个漏洞算不上“漏洞”. 问题描述 眼睛护士版本:3.0.18.301存在createProcess调用漏洞. 详细说明 ...
- MySQL数据操作(借鉴)
/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld ...
- ASP.NET常用内置对象之——Server
简介 Server对象是HttpServerUtility的一个实例,也是上下文对象context的一个属性,提供用于处理Web请求的Helper方法. 常用成员 一.Server.MapPath() ...