洛谷P1879 [USACO06NOV]玉米田Corn Fields(状压dp)
洛谷P1879 [USACO06NOV]玉米田Corn Fields
\(f[i][j]\) 表示前 \(i\) 行且第 \(i\) 行状态为 \(j\) 的方案总数。\(j\) 的大小为 \(0 \to (1 >> n - 1)\) 。
第 \(i\) 行,种植状态为 \(j\) 的方案总数等于所有合法的 \(f[i-1][k]\) 之和。
- 状态 \(j\) 满足同一行内没有相邻的两块草地(没有共同边)。
- 状态 \(j\) 和 \(k\) 满足相邻两行的种植情况没有两块草地有共同边。
\]
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1 << 12;
const int mod = 1e9;
int f[15][maxn], state[maxn], M[15][15], bit[15];
int n, m, ans;
int main()
{
    scanf("%d%d", &m, &n);
    for(int i = 1; i <= m; i++){
        for(int j = 1; j <= n; j++){
            scanf("%d", &M[i][j]);
            bit[i] = (bit[i] << 1) + M[i][j];
        }
    }
    for(int i = 0; i < (1 << n); i++){
        state[i] = (((i & (i << 1)) == 0) && ((i & (i >> 1)) == 0));
        // = 的优先级高于 &
    }
    f[0][0] = 1;
    for(int i = 1; i <= m; i++){
        for(int j = 0; j < (1 << n); j++){
            if(state[j] && ((j & bit[i]) == j)){
                for(int k = 0; k < (1 << n); k++){
                    if((j & k) == 0) f[i][j] = (f[i][j] + f[i - 1][k]) % mod;
                }
            }
        }
    }
    ans = 0;
    for(int i = 0; i < (1 << n); i++){
        ans = (ans + f[m][i]) % mod;
    }
    printf("%d\n", ans);
    return 0;
}
洛谷P1879 [USACO06NOV]玉米田Corn Fields(状压dp)的更多相关文章
- P1879 [USACO06NOV]玉米田Corn Fields   (状压dp入门)
		题目链接: https://www.luogu.org/problemnew/show/P1879 具体思路: 我们可以先把所有合法的情况枚举出来,然后对第一行判断有多少种情况满足,然后对于剩下的行数 ... 
- P1879 [USACO06NOV]玉米田Corn Fields  状压dp/插头dp
		正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ... 
- C++ 洛谷 P1879 [USACO06NOV]玉米田Corn Fields
		没学状压DP的看一下 合法布阵问题 P1879 [USACO06NOV]玉米田Corn Fields 题意:给出一个n行m列的草地(n,m<=12),1表示肥沃,0表示贫瘠,现在要把一些牛放在 ... 
- 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解
		P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ... 
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields (状态压缩DP)
		题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ... 
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压DP】题解+AC代码
		题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ... 
- 洛谷 P1879 [USACO06NOV]玉米田Corn Fields
		题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ... 
- [洛谷P1879][USACO06NOV]玉米田Corn Fields
		题目大意:有一个$n\times m$的矩阵,$(1 \leq m \leq 12; 1 \leq n \leq 12)$,想在其中的一些格子中种草,一些格子不能种草,且两块草地不相邻.问有多少种种植 ... 
- [USACO06NOV]玉米田Corn Fields     状压DP
		题面: 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他的 ... 
随机推荐
- 时间同步,使用oracle自带的ctss
			crsctl check ctss --observer mode cluvfy comp clocksync -检查crss为啥没启用 根据不同版本删除ntp的配置和服务 AIX: stops ... 
- django中orm多表查询,减少数据库查询操作
			.select_related() 的使用 
- js 相关好文章推荐
			1.关于xmlhttprequest https://segmentfault.com/a/1190000004322487 2.XMLHttpRequest2 新技巧 https://www.htm ... 
- Echars -- 在Vue中如何使用Echars
			在vue-cli项目中使用echarts -->Wangqi 这个示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S 或者使用国内的淘 ... 
- pandas 入门(3)
			from pandas import Series, DataFrame, Index import numpy as np # 层次化索引 对数据重塑和分组操作很有用 data = Series(n ... 
- ceph部署-集群建立
			一.配置storage集群1.建立集群管理目录(管理配置文件,密钥)mkdir ceph-clustercd ceph-cluster/ 2.创建一个新集群(需要先将主机名加入/etc/hosts 必 ... 
- Airbnb开源 快速搭建企业级BI数据平台
			最近在公司做一个数据可视化相关的项目,使用了Airbnb开源维护的企业级BI数据平台superset,相较于tableau这种收费的商业软件,Superset是开源维护的,同时图表的种类和颜值普遍偏高 ... 
- require 和 import 详解
			前言 JS模块化编程是前端小伙伴们必不可少的知识,下面妹子将于自认为比较清晰的方式列举出来. 1 require 特点: 1.运行时加载 2.拷贝到本页面 3.全部引入 1.1 CommonJS No ... 
- SCAU 2015 GDCPC team_training0
			A.题目:http://acm.timus.ru/problem.aspx?space=1&num=2024 题意:求一个包含K个不同字符的集合的最大长度,还有组成这个长度的集合的个数 做法: ... 
- CSS制作垂直口风琴2
			<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
