【题解】poj 3254 玉米田
假如我们知道第i-1行的有x种放法,那么对于第i行的每一种放法都有x种,所以定义dp[i][j]表示第i行状态为j时的方法数,有转移方程:
dp[i][j]=sum(dp[i-1][k]) k表示i-1行的状态
方程写出来了,但是要想完成程序,还需要解决几个地方:
1、预处理第i行的草地map[i],用一个二进制数表示,1表示不能放,0表示可以放
2、预处理第i行不相邻的状态st[j],每行共有(1<<m)-1种状态,但是很多是相邻的,怎么判断某一状态是否相邻:j&(j<<1)
3、怎么处理只能放到肥沃的草地,对于第i行的地形map[i]和某一状态method[k],如果map[i]&method[k]>=1即说明出现了放到贫瘠草地的情况
4、第1行需要特判,相当于为动态规划找到了边界值
5、对于第i行不和i-1行相邻,method[j]&method[k]==0即满足,method[j]是第i行的状态,method[k]是i-1行的状态
//dp[i][j]+=dp[i-1][k] #include<iostream>
using namespace std;
const int mod=; int m,n,num=;//m是行,n是列,num是n片土地的合法状态数
int map[],method[<<];
int dp[][<<];//第i行用的第j个方案后的总方案数 int main()
{
cin>>m>>n;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
{
int temp;
cin>>temp;
if(!temp)map[i]|=(<<(j-));
//1表示贫瘠,0表示肥沃,所以给的数据是0时,map预处理1才左移
//这里利于第29行进行判断
} for(int i=;i<(<<n);i++)
if(!(i&(i<<)))//判断该状态是否合法(相邻两个是否都是1)
method[++num]=i; for(int i=;i<=num;i++)//初始化第一排,得到dp的边界
if(!(method[i]&map[])) dp[][i]=; for(int i=;i<=m;i++)
for(int j=;j<=num;j++)
if(!(map[i]&method[j]))//判断第j种方案是否能在第i行的土地
for(int k=;k<=num;k++)
if(!(map[i-]&method[k]))//判断第k种方案是否能放在第i-1行的土地
if(!(method[j]&method[k]))//判断第j种方案是否与第k种方案上下相邻
dp[i][j]+=dp[i-][k]; int ans=;
for(int i=;i<=num;i++) ans=(ans+dp[m][i])%mod; cout<<ans<<endl;
return ;
}
【题解】poj 3254 玉米田的更多相关文章
- 【题解】 P1879 玉米田Corn Fields (动态规划,状态压缩)
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- 【bzoj4810】【ynoi2018】由乃的玉米田
4810: [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 1090 Solved: 524[Submit][Sta ...
- bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队
[Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 917 Solved: 447[Submit][Status][Di ...
- 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队
[BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...
- 状压DP【洛谷P1879】 [USACO06NOV]玉米田Corn Fields
P1879 [USACO06NOV]玉米田Corn Fields 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形 ...
- 【bzoj4810】[Ynoi2017]由乃的玉米田 莫队算法+STL-bitset
题目描述 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n ...
- 状压dp之二之三 炮兵阵地/玉米田 By cellur925
一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...
随机推荐
- TensorFlow keras中一些著名的神经网络
- Elasticsearch 集群部署
本文部署环境 $ cat /etc/redhat-release CentOS Linux release (Core) 部署前系统优化 $ /etc/security/limits.conf roo ...
- 文件读取的时候要留意 -- 序列化serialize()与反序列化unserialize():
原文:https://blog.csdn.net/little_rabbit_baby/article/details/53840543 序列化serialize()与反序列化unserialize( ...
- CG-CTF(1)
CG-CTF CG-CTF题目网址:https://cgctf.nuptsast.com/challenges#Web 第一题:签到题 查看页面源代码,得到flag(干杯~): 第二题:md5 col ...
- The new SFCB broker fails to start with a SSL-related error: Failure setting ECDH curve name (secp22
# openssl ecparam -list_curves secp384r1 : NIST/SECG curve over a 384 bit prime field secp521r1 : NI ...
- Imagelab-0-QT label显示 opencv 图像
Imagelab-0-QT label显示 opencv 图像 opencvc++qtimagelab 开始之前 这其实也是opencv 处理图像的系列, 只是想我们在进一步复杂化我们的代码之前, 每 ...
- 【抓包工具】tcpdump
tcpdump - dump traffic on a network 根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析.它支 ...
- visual stdio 2012快捷键
为什么80%的码农都做不了架构师?>>> VS2012变化的快捷键:注释::VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C),实际操作,按住Ct ...
- nmcli的基本使用
介绍NetworkManager.centos8.nmcli CentOS 7中同时支持network.service和NetworkManager.service(简称NM)2种方式配置网络,而在C ...
- 洛谷P1217 回文质数
题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围 [a,b] (5 \le a < b \le 100,000 ...