【题解】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 ≤ ...
随机推荐
- SK-learn实现k近邻算法【准确率随k值的变化】-------莺尾花种类预测
代码详解: from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split fr ...
- php 数据库备份(可用作定时任务)
参考: https://blog.csdn.net/weixin_37616043/article/details/87721181 https://blog.csdn.net/stpeace/art ...
- Ubuntu syslog 太多的 named[1195]: error (network unreachable) resolving './DNSKEY/IN': 2001:7fd::1#53
Edit file /etc/default/bind9: # run resolvconf? RESOLVCONF=yes # startup options for the server OPTI ...
- Scala教程之:函数式的Scala
文章目录 高阶函数 强制转换方法为函数 方法嵌套 多参数列表 样例类 比较 拷贝 模式匹配 密封类 单例对象 伴生对象 正则表达式模式 For表达式 Scala是一门函数式语言,接下来我们会讲一下几个 ...
- IDEA 之 ERROR:端口被占用
问题描述:在IDEA启动javaweb项目中未能成功启动,ERROR:端口已经被使用.但是tomcat并没有被启动. 解决方法: 打开CMD 输入以下命令 netstat -aon | finfstr ...
- 打造更好用的 EF 自动审计
打造更好用的 EF 自动审计 Intro 上次基于 EF Core 实现了一个自动审计的功能,详细可以参考 https://www.cnblogs.com/weihanli/p/auto-audit- ...
- mysql不同端口的连接
连接mysql3306端口命令 mysql -h58.64.217.120 -ushop -p123456 连接非3306端口(指定其他端口) 的命令 mysql -h58.64.217.120 -P ...
- 吞吐量(TPS)、QPS、并发数、响应时间(RT)
1. 响应时间(RT) 响应时间是指系统对请求作出响应的时间.直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间.由于一个系统通常会提供许多功能, ...
- PPT模板素材
http://588ku.com/sucai/0-dnum-0-54-0-1/
- 如何找到Hive提交的SQL相对应的Yarn程序的applicationId
最近的工作是利用Hive做数据仓库的ETL转换,大致方式是将ETL转换逻辑写在一个hsql文件中,脚本当中都是简单的SQL语句,不包含判断.循环等存储过程中才有的写法,仅仅支持一些简单的变量替换,比如 ...