题面:

农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。

遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是John不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。

John想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择?(当然,把新牧场完全荒废也是一种方案)

输出一个整数,即牧场分配总方案数除以100,000,000的余数。

题解:

emmm。。。一道不难的状压DP

设f[i][j]表示到i行,状态为j的方案数,

因为相邻两块土地不能选,所以我们可以先dfs搜出所有可能状态,

这样状态数暴跌10倍,,,貌似很划得来的样子,不过不这样好像也可以,但是DP判断的地方也会麻烦一些。。。

然后存下不能放的地方,并标记为1,(同样用状压)

依次枚举行,当前状态,上一行状态,统计并取模即可

 #include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 15
#define LL long long
#define mod 100000000
int n,m,tmp,ans,tot;
int f[AC][],s[AC],num[];//error!!!状态要开400,,, void pre()
{
int a;
scanf("%d%d",&n,&m);
for(R i=;i<=n;i++)
for(R j=;j<=m;j++)
{
scanf("%d",&a);
if(!a) s[i] |= << (m - j);//给定状态也要压
}
} void dfs(int x,int now)
{
if(x) tmp+= << (m - now);
if(now == m)
{
num[++tot]=tmp;
if(x) tmp-= << (m - now);
return ;
}
if(x) dfs(,now+);
else
{
dfs(,now+);
dfs(,now+);
}
if(x) tmp-= << (m - now);
} void work()
{
for(R i=;i<=tot;i++)//第一行特殊处理
{
if(s[] & num[i]) continue;
f[][i]=;
}
for(R i=;i<=n;i++)//枚举行
{
for(R j=;j<=tot;j++)//枚举当前行状态
{
if(s[i] & num[j]) continue;
for(R k=;k<=tot;k++)//枚举上一行状态
{
if(s[i-] & num[k]) continue;
if(num[j] & num[k]) continue;
f[i][j] += f[i-][k];
f[i][j] %= mod;
//if(f[i][j] > mod) f[i][j] -= mod;
}
}
}
for(R i=;i<=tot;i++)
{
ans+=f[n][i];
ans%=mod;
//if(ans > mod) ans-=mod;
}
printf("%d\n",ans);
} int main()
{
// freopen("in.in","r",stdin);
pre();
dfs(,);//获取所有有效状态
dfs(,);
work();
//fclose(stdin);
return ;
}

[USACO06NOV]玉米田Corn Fields 状压DP的更多相关文章

  1. P1879 [USACO06NOV]玉米田Corn Fields 状压dp/插头dp

    正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ...

  2. [USACO06NOV]玉米田Corn Fields (状压$dp$)

    题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...

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

    题目链接: https://www.luogu.org/problemnew/show/P1879 具体思路: 我们可以先把所有合法的情况枚举出来,然后对第一行判断有多少种情况满足,然后对于剩下的行数 ...

  4. P1879 [USACO06NOV]玉米田Corn Fields(状压dp)

    P1879 [USACO06NOV]玉米田Corn Fields 状压dp水题 看到$n,m<=12$,肯定是状压鸭 先筛去所有不合法状态,蓝后用可行的状态跑一次dp就ok了 #include& ...

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

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

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

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

  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. [USACO06NOV]玉米田$Corn \ \ Fields$ (状压$DP$)

    #\(\mathcal{\color{red}{Description}}\) \(Link\) 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ ...

随机推荐

  1. 通过反编译看Java String及intern内幕--费元星站长

    通过反编译看Java String及intern内幕   一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往 ...

  2. 聊聊WS-Federation(test)

    本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...

  3. Visual Studio 起始页中不显示最近使用的项目的解决办法

    将 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/NoRecentDocsHistory的 ...

  4. CentOS 7.2安装11g Grid Infrastructure

      Preface       Oracle claimed that 11g RAC is supported on Redhat Linux 7 and above version,but the ...

  5. QT 标题栏隐藏可拖拽

    这个也是我网上找到了 为了方便,记录一下 void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void ...

  6. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第2章.HTTP协议简介

    第2章--HTTP协议简介 HTTP协议简介 Abstract: HTTP协议的特性,HTTP请求/响应的过程,HTTP请求/响应的报文格式等知识,最后会演示如何通过Chrome提供的开发者工具,去跟 ...

  7. django 连接mysql报错

    原因: 问题1. 即从mysql5.7版本之后,默认采用了caching_sha2_password验证方式. 问题2.  然后在执行 python manage.py makemigrations依 ...

  8. android 出现Make sure the Cursor is initialized correctly before accessing data from it

    Make sure the Cursor is initialized correctly before accessing data from it 详细错误是:java.lang.IllegalS ...

  9. lintcode-171-乱序字符串

    171-乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包 ...

  10. python中装饰器的原理以及实现,

    python版本 3.6 1.python的装饰器说白了就是闭包函数的一种应用场景,在运用的时候我们遵循 #开放封闭原则:对修改封闭,对拓展开放 2.什么是装饰器 #装饰他人的器具,本身可以是任意可调 ...