POJ-325Corn Fields
链接:https://vjudge.net/problem/POJ-3254#author=freeloop
题意:
农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。
遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是John不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。
John想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择?(当然,把新牧场完全荒废也是一种方案)
思路:
状压dp,二进制表示每一行的状态,储存时使用十进制。
具体思路注释。
代码:
#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
#include <cstdio>
using namespace std; typedef long long LL;
const int MAXN = 15;
const int STATES = 600;
const int MOD = 1e9; //377 最多状态 int cur[MAXN];
int dp[MAXN][STATES];
int states[STATES];
int pos = 0; void Init(int w)
{
int total = (1 << w);
for (int i = 0;i < total;i++)
{
if(!(i&(i<<1)))//i往左位移以为,是否有两个1重叠,重叠不满足
states[++pos] = i;
}
} int main()
{
int n, m;
int flag;
scanf("%d%d", &m, &n);
Init(n);
for (int i = 1;i <= m;i++)
for (int j = 1;j <= n;j++)
{
scanf("%d", &flag);
if (!flag)//方便判断某种状态是否满足,0时加
cur[i] += (1 << (n - j));
} for (int i = 1;i <= pos;i++)
{
if ((cur[1] & states[i]) == 0)//状态为1表示种,同时行状态为1表示不能种
dp[1][i] = 1;
} for (int i = 2;i <= m;i++)
{
for (int j = 1;j <= pos;j++)
{
if (states[j] & cur[i])//枚举的状态是否冲突当前行
continue;
for (int k = 1;k <= pos;k++)
{
if (states[k] & cur[i - 1])//枚举的上一行状态是否冲突
continue;
if (states[j] & states[k])//枚举的上下两行状态是否冲突
continue;
dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
}
}
} int res = 0;
for (int i = 1;i <= pos;i++)
res = (res + dp[m][i]) % MOD; printf("%d\n", res); return 0;
}
POJ-325Corn Fields的更多相关文章
- poj Corn Fields 状态压缩dp。
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5763 Accepted: 3052 Descr ...
- poj Muddy Fields
Muddy Fields 原题去我创的专题里找,在文件夹首页. 题目: 给出N*M矩阵.当中*表示泥土,.表示小草.要你用最少的木板把泥土覆盖. 木板长度不限.可是仅仅能水平和竖直. 行列式二分匹配配 ...
- POJ Corn Fields 状态压缩DP基础题
题目链接:http://poj.org/problem?id=3254 题目大意(名称什么的可能不一样,不过表达的意思还是一样的): 种玉米 王小二从小学一年级到现在每次考试都是班级倒数第一名,他的爸 ...
- POJ Muddy Fields 泥泞的牧场 二分图
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13235 Accepted: 4879 汪星人 ...
- poj 3254Corn Fields (入门状压dp)
Farmer John has purchased a lush ≤ M ≤ ; ≤ N ≤ ) square parcels. He wants to grow some yummy corn fo ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- poj 3254 Corn Fields
http://poj.org/problem?id=3254 Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- 状压DP POJ 3254 Corn Fields
题目传送门 /* 状态压缩DP:先处理硬性条件即不能种植的,然后处理左右不相邻的, 接着就是相邻两行查询所有可行的种数并累加 写错一个地方差错N久:) 详细解释:http://www.tuicool. ...
- POJ 3254 Corn Fields(状压DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13732 Accepted: 7216 Desc ...
- poj 2226 Muddy Fields(最小覆盖点+构图)
http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
随机推荐
- spl处理文件(文件详细信息、文件遍历、查询指定行、写入CSV文件)
<?php /** * 文件操作 */ //常用操作 $file = new SplFileInfo('D:/workspace/xlyy/spl/test.txt'); $file_info ...
- Python序列——元组
元组是什么 1 创建元组 2 访问元组中的值 3 更新元组中的元素 4 删除元组中的元素或者元组本身 元组相关操作 内建函数对元组的支持 1 序列类型函数 2 元组内建函数 元组的特殊性 1. 元组是 ...
- WebDriver API——浏览器控制暨如何学习webdriver API
在测试过程中我们可能需要对浏览器进行控制,大小控制啊,刷新页面啊,前进后退等等,最常用的两个接口是window和Navigation. 我们最常用的就是这4个,那么你是否感兴趣它们后面是什么,它们是怎 ...
- C++的逐过程和逐语句的区别
1.逐语句是指在遇到函数调用语句的时候进入到函数内部执行. 2.逐过程是指在遇到函数调用语句时把函数当作一条语句执行.
- Java(二)——开发环境搭建 安装JDK和配置环境变量
1.安装JDK 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载 ...
- 机器学习 : 高斯混合模型及EM算法
Mixtures of Gaussian 这一讲,我们讨论利用EM (Expectation-Maximization)做概率密度的估计.假设我们有一组训练样本x(1),x(2),...x(m),因为 ...
- AutoIt:应用WMI接口,打印远程机器安装的所有应用程序
Dim $computer ="computer name" Dim $Remoteuser ="Login account" Dim $Remotepass ...
- bzoj 2194 快速傅立叶之二 —— FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2194 如果把 a 序列翻转,则卷积得到的是 c[n-i],再把得到的 c 序列翻转即可. 代 ...
- 【Hadoop】HDFS笔记(三):HDFS的Shell操作
HDFS处理文件的命令和Linux命令差不多,但注意区分大小写. (Linux区分大小写,Windows不区分大小写) 一.fs命令 键入命令"./bin/hadoop fs"将输 ...
- 技术胖Flutter第四季-20导航的参数传递和接受-1
技术胖Flutter第四季-20导航的参数传递和接受-1 视频地址:https://www.bilibili.com/video/av35800108/?p=21 先安装一个新的插件: Awesome ...