一道状压\(DP\)

POJ原题链接

洛谷原题链接

很显然的状压,\(1\)表示种植,\(0\)表示荒废。

将输入直接进行状压,而要满足分配的草场是适合种草的土地,即是分配时的状态中的\(1\),在输入对应的状态中也是\(1\),而\(0\)对应\(0,1\)都可以。

设输入的这行状态为\(a[i]\),分配时的这行状态为\(x\),则用位运算来表示上述条件即\((\sim a[i])\&x=0\),设其为函数\(judge(i,x)\)。

因为每个草场不能相邻,对于每一行,可以先预处理出在二进制下没有\(1\)是相邻的所以数,记录在集合\(S\)中,集合大小为\(l\);对于列上要求不相邻,即上下两行不能有\(1\)相邻,即\(i\&(i-1)=0\)。

定义\(f[i][j]\)表示分配至第\(i\)行,第\(i\)行的状态为\(j\)。

\(\qquad\qquad f[i][j]=\sum\limits_{k=0,judge(i-1,S[k])\text{且}i\&(i-1)=0}^{l-1}f[i-1][k],\text{其中}i,j\text{满足}judge(i,S[j])\)

最终结果即是\(\sum\limits_{i=0}^{l-1}f[n][i]\)。

另外,在\(DP\)时记得对\(10^9\)进行取模。

#include<cstdio>
using namespace std;
const int N = 13;
const int M = 400;
const int mod = 1e9;
int f[N][M], a[N], S[M];
int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c<'0' || c>'9'; c = getchar())
p = (c == '-' || p) ? 1 : 0;
for (; c >= '0'&&c <= '9'; c = getchar())
x = x * 10 + (c - '0');
return p ? -x : x;
}
bool judge(int x, int y)
{
if ((~a[x]) & y)
return false;
return true;
}
int main()
{
int i, j, n, m, l = 0, k, o;
n = re();
m = re();
o = 1 << m;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
a[i] |= (re() << (m - j));
for (i = 0; i < o; i++)
if (!(i&(i << 1)))
k = S[l++] = i;
f[0][0] = 1;
for (i = 1; i <= n; i++)
for (j = 0; j < l; j++)
if (judge(i, S[j]))
for (k = 0; k < l; k++)
if (judge(i - 1, S[k]) && !(S[j] & S[k]))
(f[i][j] += f[i - 1][k]) %= mod;
for (k = i = 0; i < l; i++)
(k += f[n][i]) %= mod;
printf("%d", k);
return 0;
}

POJ3254或洛谷1879 Corn Fields的更多相关文章

  1. 【学术篇】状态压缩动态规划——POJ3254/洛谷1879 玉米田Corn Field

    我要开状压dp的坑了..直播从入门到放弃系列.. 那就先拿一道状压dp的水题练练手吧.. 然后就找到了这一道..这道题使我清醒地认识到阻碍我的不是算法,而是视力= = 传送门: poj:http:// ...

  2. 洛谷2212Watering the Fields S 最小生成树

    题目链接:https://www.luogu.com.cn/problem/P2212 几乎是Kruskal裸题,但是建n*(n-1)条边给我T了俩点,后来我发现只要C(n,2)条边就可以,因为假设( ...

  3. 洛谷P1879 [USACO06NOV]玉米田Corn Fields(状压dp)

    洛谷P1879 [USACO06NOV]玉米田Corn Fields \(f[i][j]\) 表示前 \(i\) 行且第 \(i\) 行状态为 \(j\) 的方案总数.\(j\) 的大小为 \(0 \ ...

  4. 【题解】洛谷P1879 [USACO06NOV] Corn Fields(状压DP)

    洛谷P1879:https://www.luogu.org/problemnew/show/P1879 思路 把题目翻译成人话 在n*m的棋盘 每个格子不是0就是1 1表示可以种 0表示不能种 相邻的 ...

  5. 【洛谷P1879】玉米田Corn Fields

    玉米田Corn Fields 题目链接 此题和互不侵犯状压DP的做法类似 f[i][j]表示前i行,第i行种植(1)/不种植(0)构成的二进制数为j时的方案数 首先我们可以预处理出所有一行中没有两个相 ...

  6. 状压DP【洛谷P1879】 [USACO06NOV]玉米田Corn Fields

    P1879 [USACO06NOV]玉米田Corn Fields 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形 ...

  7. C++ 洛谷 P1879 [USACO06NOV]玉米田Corn Fields

    没学状压DP的看一下 合法布阵问题  P1879 [USACO06NOV]玉米田Corn Fields 题意:给出一个n行m列的草地(n,m<=12),1表示肥沃,0表示贫瘠,现在要把一些牛放在 ...

  8. 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...

  9. POJ3254:Corn Fields——题解

    http://poj.org/problem?id=3254 题面来自洛谷:https://www.luogu.org/problemnew/show/1879 农场主John新买了一块长方形的新牧场 ...

随机推荐

  1. js 乘法 4.39*100 出现值不对问题解决

    https://www.jianshu.com/p/a026245661bb //除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显. ...

  2. clone()与image和 cloneTo()

    Mat image = imread("1.png" ) ; Mat image1 ; Mat image1(image) ;//仅是创建了Mat的头部分,image1与image ...

  3. matlab stereo_gui立体标定

    http://www.vision.caltech.edu/bouguetj/calib_doc/index.html#examples 文档中举了几个例子,有关双目的是第5个, 这个例子展示了如何使 ...

  4. ubuntu下安装nodejs和npm

    第一种安装方法: 安装nodejs : 1 sudo apt-get install nodejs 运行 nodejs -v 会弹出安装node的版本号 这里使用的是 nodejs 并不是常用的nod ...

  5. SSL、TLS中间人攻击

    生成私钥 生成一个ca.key私钥签名 然后用私钥生成一个伪造证书服务器的根证书 生成一个伪造证书服务器的根证书ca.crt 在攻击主机启动路由转发功能 或者echo 1 > /proc/sys ...

  6. backdoor-factory

    启动backdoor-factory 寻找大于100字节的代码洞 执行的结果 查看适合的payload程序 iat_reverse_tcp_stager_threaded分片段注入方式 使用这种注入方 ...

  7. JMeter(二十二)与其它工具对比(转载)

    转载自 http://www.cnblogs.com/yangxia-test JMeter工具的扩展性非常好. JMeter工具是开源的.开源不仅仅意味着免费,更重要的是意味着用户可以通过开放的源代 ...

  8. cef研究

    // Copyright (c) 2010 The Chromium Embedded Framework Authors. All rights // reserved. Use of this s ...

  9. SSH 连接很慢

    相信很多朋友在使用Linux系统的时候因为安全性的原因摒弃了telnet rlogin 或者 X-window,而把openssh作为自己默认的远程登录方式.然而经常会遇到的一个情况是telnet到s ...

  10. Trigger,Cursor

    USE [Demo]GO /****** Object: StoredProcedure [dbo].[p_couser_Student] Script Date: 02/24/2014 20:43: ...