[Usaco2006 Nov]Corn Fields牧场的安排 壮压DP
看到第一眼就发觉是壮压DP
然后就三进制枚举子集吧。
这题真是壮压入门好题。。。
对于dp[i][j] 表示第i行,j状态下前i行的分配方案数。
那么dp[i][j]肯定是从i-1行转过来的
那么由于不能挨着放,那么我们肯定是枚举i - 1行状态时不能包含j的任何一位。
那么只要令k = ((1 << n) - 1) ^ j,k中肯定就不包含j的位了
是这样枚举k的子集
int sub = k;
do
{
sub = k& (sub - 1);
}while(sub != k);
然后对每个子集,判断合法性,然后相加即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#define MAXN 1005
#define INF 1000000000
using namespace std;
int dp[13][1 << 13];
int n, m;
int st[13];
int mod = 100000000;
bool ok(int s, int pos)
{
if((s | st[pos]) > st[pos]) return false;
for(int i = 0; i < n; i++)
if(s & (1 << i))
{
if(s & (1 << (i + 1))) return false;
}
return true;
}
int main()
{
int x;
scanf("%d%d", &m, &n);
for(int i = 1; i <= m; i++)
{
for(int j = 0; j < n; j++)
{
scanf("%d", &x);
if(x) st[i] |= (1 << j);
}
}
dp[0][0] = 1;
for(int i = 1; i <= m; i++)
{
for(int k = 0; k < (1 << n); k++)
{
int s = ((1 << n) - 1) ^ k;
if(ok(k, i))
{
//printf("%d %d\n", k, s);
dp[i][k] += dp[i - 1][0];
for(int j = s; j; j = s & (j - 1))
{
if(ok(j, i - 1))
dp[i][k] = (dp[i][k] + dp[i - 1][j]) % mod;
}
}
}
}
int ans = 0;
for(int i = 0; i < (1 << n); i++)
ans = (ans + dp[m][i]) % mod;
printf("%d\n", ans);
return 0;
}
[Usaco2006 Nov]Corn Fields牧场的安排 壮压DP的更多相关文章
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
- bzoj1725 [Usaco2006 Nov]Corn Fields牧场的安排(状压dp)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 714 Solved: 502 ...
- BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...
- bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压dfs)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1122 Solved: 80 ...
- 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排 状态压缩dp
题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...
- BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压动归
Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...
- BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 400 Solved: 290 ...
- 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排
题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...
- BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排
Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...
随机推荐
- 4070: [Apio2015]雅加达的摩天楼
Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “do ...
- Docker入门
-----------------------------------------Docker入门教程(一)介绍Docker入门教程(二)命令Docker入门教程(三)DockerFileDocker ...
- PHP之路——大文件上传
修改php.ini 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错 3.upl ...
- Longest common prefix | leetcode
Write a function to find the longest common prefix string amongst an array of strings. 思路:要去是寻找字符串ve ...
- iOS开发之Runloop(转)
Objective-C之run loop详解 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9237973 转载请注明出 ...
- Accessing Scoped Variables
To permit the JSP page to access the data, the servlet needs to use setAttribute to store the data i ...
- bzoj 3283: 运算器 扩展Baby Step Giant Step && 快速阶乘
3283: 运算器 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 184 Solved: 59[Submit][Status][Discuss] D ...
- Android之单复选框及Spinner实现二级联动
一.基础学习 1.图形学真的很神奇啊....查了些资料做出了3D云标签,哈哈...其实直接拿来用的,我们要效仿鲁迅先生的拿来主义,嘿嘿~~3D标签云就是做一个球面,然后再球面上取均匀分布的点,把点坐标 ...
- 【UVAlive 3989】 Ladies' Choice (稳定婚姻问题)
Ladies' Choice Teenagers from the local high school have asked you to help them with the organizatio ...
- 转:十九、Java的接口及实例
http://blog.csdn.net/liujun13579/article/details/7736116 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合 ...