一道状压\(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. 修改redis 持久化路径和日志 路径 ,修改kafka日志路径

    redis修改持久化路径和日志路径 vim redis.conf logfile /data/redis_cache/logs/redis.log #日志路径 dir /data/redis_cach ...

  2. Physical (Raw) Versus Logical Backups

    [Physical (Raw) Versus Logical Backups] Physical backups consist of raw copies of the directories an ...

  3. Forms.WebBrowser与Controls.WebBrowser区别

    Forms.WebBrowser与Controls.WebBrowser区别 Forms.WebBrowser有ScrollBarsEnabled 属性,即窗口滚动条,可以设置为false即可: Co ...

  4. java面试题:分布式

    分布式分为分布式缓存(Redis).分布式锁(Redis或Zookeeper).分布式服务(Dubbo或SpringCloud).分布式服务协调(Zookeeper).分布式消息队列(Kafka.Ra ...

  5. Django 常见错误总结

    1,在 Django 的框架中,从view中对文本文档进行处理的过程中,发现总是找不到对应的 .txt 文件,而在同级目录下面的 tests.py(自己新建的 py 文件)中却能找到,后来发现还是路径 ...

  6. 八:python 对象类型详解四:字典

    一:字典通识: 1,字典通过键而不是偏移量来读取: 2,字典是任意对象的无序集合: 3,字典可变长.异构.任意嵌套: 4,字典属于可变映射类型: 5,对象引用表(散列表): 二:实际应用中的字典: 1 ...

  7. css3 vw、vh属性详解,以及与%、rem的区别介绍

    最近的项目需求,内嵌电视端显示页面,所以使用到了css3的属性:vw \ vh,遇到一些问题,记录下来 vw.vh是什么? 字面上可以简单理解为,vw (view width),vh(view hei ...

  8. NumPy 排序、条件刷选函数

    NumPy 排序.条件刷选函数 NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法 ...

  9. python爬虫----scrapy框架简介和基础应用

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...

  10. sqlserver2017 +SSMS+ VS2017+SSDT 安装要点及相关组件下载地址

    1.sqlserver2017安装PolyBase需要安装jdk7 ,注意必须是7  jdk10是不行的. 下载地址:http://dl-t1.wmzhe.com/30/30117/jdk_7u_1. ...