洛谷 P1879 玉米田(状压DP入门题)
https://www.cnblogs.com/violet-acmer/p/9852294.html
题解:
相关变量解释:
int M,N;
int plant[maxn][maxn];//草场情况
struct Node
{
int status;//状态
int res;//方案
Node(int a=,int b=):status(a),res(b){}
};
vector<Node >dp[maxn];//dp[i][j] : 第i行的j状态能达到的最大方案
根据dp定义,很容易写出状态转移方程:
for(int i=;i <= M;++i)
{
for(int j=;j <= maxNum;++j)
{
int res=Find(j,i-);//查找与上一次决策没有相邻的草地的决策个数
//isSat1() : 判断草地是否合法,即判断不含有相邻草场
//isSat2() : 判断当前决策是否有相邻的草地
if(isSat1(i,j) && isSat2(j) && res)
dp[i].pb(Node(j,res));
}
}
AC代码:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
#define R(x) (1<<x)
#define pb(x) push_back(x)
const int MOD=1e8;
const int maxn=+; int M,N;
int plant[maxn][maxn];//草场情况
struct Node
{
int status;//状态
int res;//方案
Node(int a=,int b=):status(a),res(b){}
};
vector<Node >dp[maxn];//dp[i][j] : 第i行的j状态能达到的最大方案
bool isSat1(int i,int x)//判断草地是否合法
{
int index=N;
for(int j=;j <= N;++j)
if(plant[i][index--] == && (R(j-)&x) != )
return false;
return true;
}
bool isSat2(int x)//判断当前决策是否有相邻的草地
{
for(int j=;;++j)
{
int val=R(j-)+R(j-);
if(val > x)
return true ;
if((val&x) == val)
return false;
}
return true;
}
int Find(int now,int i)//查找与上一次决策没有相邻的草地的决策个数
{
int res=;
for(int j=;j < dp[i].size();++j)
{
Node node=dp[i][j];
int pre=node.status;
if((pre&now) == )
res=res%MOD+node.res;
}
return res%MOD;
}
void Solve()
{
int maxNum=(<<N)-;
dp[].pb(Node(,));
for(int i=;i <= M;++i)
{
for(int j=;j <= maxNum;++j)
{
int res=Find(j,i-);
if(isSat1(i,j) && isSat2(j) && res)
dp[i].pb(Node(j,res));
}
}
int res=;
for(int i=;i < dp[M].size();++i)
res=res%MOD+dp[M][i].res;
printf("%d\n",res%MOD);
}
int main()
{
scanf("%d%d",&M,&N);
for(int i=;i <= M;++i)
for(int j=;j <= N;++j)
scanf("%d",plant[i]+j);
Solve();
}
洛谷 P1879 玉米田(状压DP入门题)的更多相关文章
- 洛谷P3959 宝藏(状压dp)
传送门 为什么感觉状压dp都好玄学……FlashHu大佬太强啦…… 设$f_{i,j}$表示当前选的点集为$i$,下一次要加入的点集为$j$时,新加入的点和原有的点之间的最小边权.具体的转移可以枚举$ ...
- 洛谷 P3112 后卫马克 —— 状压DP
题目:https://www.luogu.org/problemnew/show/P3112 状压DP...转移不错. 代码如下: #include<iostream> #include& ...
- 【洛谷4941】War2 状压Dp
简单的状压DP,和NOIP2017 Day2 找宝藏 代码几乎一样.(比那个稍微简单一点) f[i][j] ,i代表点的状态,j是当前选择的点,枚举上一个选到的点k 然后从f[i-(1<< ...
- 洛谷 3959 宝藏——枚举+状压dp
题目:https://www.luogu.org/problemnew/show/P3959 原来写了个不枚举起点的状压dp. #include<iostream> #include< ...
- 洛谷P1879 玉米田
题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他 ...
- 洛谷$P3959\ [NOIp2017]$ 宝藏 状压$dp$
正解:状压$dp$ 解题报告: 传送门$QwQ$ $8102$年的时候就想搞这题了,,,$9102$了$gql$终于开始做这题了$kk$ 发现有意义的状态只有当前选的点集和深度,所以设$f_{i,j} ...
- 洛谷 P1433 吃奶酪 状压DP
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1& ...
- poj 3254 状压dp入门题
1.poj 3254 Corn Fields 状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...
- 洛谷P2473奖励关——状压DP
题目:https://www.luogu.org/problemnew/show/P2473 还是对DP套路不熟悉... 像这种前面影响后面,而后面不影响前面的问题就应该考虑倒序递推: 看n只有15那 ...
随机推荐
- ConnectTimeout和ReadTimeout所代表的意义
参考:ConnectTimeout和ReadTimeout所代表的意义 ConnectTimeout 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间. 在java中,网络状况 ...
- python 字符串常用操作方法
python 字符串常用操作方法 python 字符串操作常用操作,如字符串的替换.删除.截取.赋值.连接.比较.查找.分割等 1.去除空格 str.strip():删除字符串两边的指定字符,括号的写 ...
- build/temp.linux-x86_64-2.7/_openssl.c:493:30: fatal error: openssl/opensslv.h: No such file or directory
解决:apt-get install libssl-dev apt install python-dev(这个可能和那个错误关系不大)
- java中的序列化和反序列化
package cn.zhou; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.Fil ...
- DeepLearning网络设计总结
检测网络: 1. tiling层可以减少计算量,deconvolution相比tiling性能要好一些
- BZOJ4372烁烁的游戏——动态点分治+线段树(点分树套线段树)
题目描述 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮鼠.皮皮鼠会被 ...
- P1028 数的计算
P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该 ...
- 吉哥系列故事――恨7不成妻 HDU - 4507 数位dp
思路 和普通的DP不一样的是 这里求的是满足条件的数的平方的和 而数位DP只跟数每位是什么密切相关 所以要开一个结构 (多加一个 数的和sum 和平方和qsum)存一下各个状态的和的情况 dp[p ...
- 洛谷P5020货币系统
题目 这个题打眼看上去可能是一个数论或者DP,其实我们可以简化一下题意,即 给定一个集合\(\alpha\),找到几个数使得这几个数可以拼凑起来这个集合里所有的数,且需要使这些数的个数最小. 这样这个 ...
- github 快速部署
在github上 新建一个项目后,并且未提交任何代码,会有一个页面提示我们如何快速部署.在此备份一下那个页面 Quick setup — if you’ve done this kind of thi ...