【洛谷 P1879】【[USACO06NOV]玉米田Corn Fields】
题目:
思路:
Q:如何想到是状压DP?
A:那是因为(我看了标签)\(1 ≤ M ≤ 12; 1 ≤ N ≤ 12\),\(2 ^ {12}\) 不过才。。。(Win7计算器使用中)\(4096\)嘛! 然后如果用状压DP也可以优化时空
确定状态:
\(f_{i,j}\) 表示第\(i\)行的方案(对,方案,这是方案而答案是方案数)是\(j\)(是一个二进制数,用十进制来存储,第\(k\)位是\(1/0\)(二进制)表示选\(/\)不选)时的方案数。
确定转移方程:
声明:下面的\(j,k\)都是一个合法的方案
设已经进行到\(i\)行,此时的方案是\(j\),上一行的方案是\(k\)。
有一个特殊条件(边界):\(i = 1\)。
既然是第一行,那么它的所以合法方案都是正确的,所以边界是:
\]
也可以很容易地想到本行的合法方案的方案数是上一行的所有合法方案数,也就是:
\]
代码:
声明:那个优化可能并无卵用。。。
const int N = 15;
int n, m;
int f[N][(1 << N)];
int st[1 << N]; //一个小小的优化数组
int a[N];
int tot;
void _init() //一个小小的优化,判断此方案 在这一行 是不是合法的
{
for (int i = 0; i < (1 << m); i++)
{
if (i & (i << 1)) continue;
st[++tot] = i;
}
}
int main()
{
scanf ("%d%d", &n, &m);
for (int j = 1; j <= n; j++)
for (int i = m - 1; i >= 0; i--)
{
int x;
scanf ("%d",&x);
a[j] += (x << i); //本行的方案(可能不是合法)
}
_init(); //开始优化
for (int i = 1; i <= tot; i++) //边界条件
{
if (!((st[i] | a[1]) == a[1]))continue; //是否合法
f[1][st[i]] = 1;
}
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= tot; j++)
{
if (!((st[j] | a[i]) == a[i]))continue; //判断合法
for (int k = 1; k <= tot; k++)
{
if (!((st[k] | a[i - 1]) == a[i - 1]))continue; //同上条注释
if (st[j] & st[k]) continue;
f[i][st[j]] += f[i - 1][st[k]]; //转移
f[i][st[j]] %= 100000000;
}
}
}
int ans = 0;
for (int j = 1; j <= tot; j++) //答案
ans += f[n][st[j]], ans %= 100000000;
printf ("%d", ans);
return 0;
}
【洛谷 P1879】【[USACO06NOV]玉米田Corn Fields】的更多相关文章
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields(状压dp)
洛谷P1879 [USACO06NOV]玉米田Corn Fields \(f[i][j]\) 表示前 \(i\) 行且第 \(i\) 行状态为 \(j\) 的方案总数.\(j\) 的大小为 \(0 \ ...
- C++ 洛谷 P1879 [USACO06NOV]玉米田Corn Fields
没学状压DP的看一下 合法布阵问题 P1879 [USACO06NOV]玉米田Corn Fields 题意:给出一个n行m列的草地(n,m<=12),1表示肥沃,0表示贫瘠,现在要把一些牛放在 ...
- 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields (状态压缩DP)
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压DP】题解+AC代码
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- 洛谷 P1879 [USACO06NOV]玉米田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
题目大意:有一个$n\times m$的矩阵,$(1 \leq m \leq 12; 1 \leq n \leq 12)$,想在其中的一些格子中种草,一些格子不能种草,且两块草地不相邻.问有多少种种植 ...
- 【洛谷P1879】玉米田Corn Fields
玉米田Corn Fields 题目链接 此题和互不侵犯状压DP的做法类似 f[i][j]表示前i行,第i行种植(1)/不种植(0)构成的二进制数为j时的方案数 首先我们可以预处理出所有一行中没有两个相 ...
- 洛谷 P1879 [USACO06NOV]玉米田 解题报告
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ M ≤ 12; 1 ≤ ...
- P1879 [USACO06NOV]玉米田Corn Fields(状压dp)
P1879 [USACO06NOV]玉米田Corn Fields 状压dp水题 看到$n,m<=12$,肯定是状压鸭 先筛去所有不合法状态,蓝后用可行的状态跑一次dp就ok了 #include& ...
随机推荐
- layui静态表格固定td宽度,table固定td宽度
正在做一个项目,要求数据表的列是不固定的,有可能是有10列,有可能是20列,第一列宽度要固定,然后我怎么设置都没有用, 这个问题困扰了我三天,后来终于百度到了, 这个博客: https://www.c ...
- layui 源码解读(部分)
<!DOCTYPE html> <head> </head> <body> <input type="button" id=& ...
- httpClient和RestTemplate的使用
1.httpClient的使用 <dependency> <groupId>org.apache.httpcomponents</groupId> <arti ...
- java 上传大文件以及文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- Spring Data Jpa (四)注解式查询方法
详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...
- LVM逻辑卷的扩充
LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑滚动条管理员.之所以称为”滚动条”可能是因为可以将 filesystem 像滚动条一样伸长或缩短.LVM 的作法是将几 ...
- 简单记录一下vue生命周期及 父组件和子组件生命周期钩子执行顺序
首先,vue生命周期可以用下图来简单理解 当然这也是官方文档的图片,详细的vue周期详解请参考这里 然而当同时存在父子组件的时候生命周期钩子是如何执行的呢? 请看下文: 加载渲染过程父beforeCr ...
- (转)openssl 命令: openssl req 命令详解
openssl req命令主要的功能有,生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书.本文就主要记录一下open ...
- leetcode-mid-others-169. Majority Element¶
mycode 54.93% class Solution(object): def majorityElement(self, nums): """ :type num ...
- zabbix 监控安装部署
今天尝试一下部署zabbix 官方文档包括多个版本,此处选择4.0版本 https://www.zabbix.com/documentation/4.0/manual 1.安装环境选择 zabbix4 ...