最近题目都有状态压缩,我是蒟蒻,并不会状态压缩

然后我决定学了!

然后发现我学不来。

OI-WIKI上的界面给我推荐了这道题https://oi-wiki.org/dp/state/

状态压缩入门题,可惜我不会

下面是OIWIKI的代码

#include<bits/stdc++.h>
using namespace std;
int read(){//读入优化
int x=,w=;char ch=;
while(ch<'' || ch>''){if(ch=='-') w=-;ch=getchar();}
while(ch>='' && ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*w;
}
int main(){
int m=read(),n=read();//题中行数和列数
int maxn=<<n;//上界
int Type[maxn+];//储存压缩后的每行可能的状态
int top=;
int Soil[m+]={};//每行土地的情况
int f[][maxn+];//储存答案的数组
for (int i=;i<maxn;i++){//存储每行可能的状态
if (i&(i<<)) continue;
Type[++top]=i;
}
for (int i=;i<=m;i++)
for (int l=;l<=n;l++){
int k=read();
if (k==) Soil[i]+=<<(n-l);//反向建图,0置为1,和Type数组中情况相对,便于使用位运算检查
//因为先读入的是左侧的土地,二进制中左侧的'1'代表的值更大,所以将第l个读入的数存在第l位应+(1<<(n-l))
}
memset(f,,sizeof(f));
for (int i=;i<=top;i++)
if (!(Type[i]&Soil[])) f[][i]=;
for (int i=;i<=m;i++)//穷举层数
for (int l=;l<=top;l++){//穷举本层
if (Type[l]&Soil[i]) continue;//判断是否符合
for (int j=;j<=top;j++){//穷举上一层
if (Type[j]&Soil[i-]) continue;//判断是否符合
if (Type[l]&Type[j]) continue;//判断是否符合
f[i][l]=(f[i][l]+f[i-][j])%;
}
}
int ans=;
for (int i=;i<=top;i++) ans=(ans+f[m][i])%;//累加答案
cout<<ans;//输出
}

然后我抄袭了题解,AC了

总结:我太菜了

[P1879][USACO06NOV]玉米田Corn Fields (状态压缩)的更多相关文章

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

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

  2. C++ 洛谷 P1879 [USACO06NOV]玉米田Corn Fields

    没学状压DP的看一下 合法布阵问题  P1879 [USACO06NOV]玉米田Corn Fields 题意:给出一个n行m列的草地(n,m<=12),1表示肥沃,0表示贫瘠,现在要把一些牛放在 ...

  3. 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...

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

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

  5. 洛谷 P1879 [USACO06NOV]玉米田Corn Fields

    题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...

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

    题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...

  7. P1879 [USACO06NOV]玉米田Corn Fields

    题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...

  8. 洛谷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 ...

  9. 【luogu P1879 [USACO06NOV]玉米田Corn Fields】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1879 状压DP. 设dp[i][j]表示第i行,状态为j的方案数 初始dp[0][0] = 1 这样一共12 ...

随机推荐

  1. Java开发环境笔记

    在配置环境变量中 设置Java_home: 一是为了方便引用,比如,jdk安装在c:\jdk16.0目录里,则设置java_home为该目录路径,那么以后要使用这个路径的时候,只需输入%java_ho ...

  2. 查找所有sphinx引擎表并生成创建表的语句

    -- 查找所有sphinx引擎select group_concat(table_name separator ' ') from information_schema.tables where en ...

  3. ***在Linux环境下mysql的root密码忘记解决方法(三种)-推荐第三种

    MySQL密码的恢复方法之一 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态 ...

  4. [转] React之Immutable学习记录

    从问题说起:熟悉 React 组件生命周期的话都知道:调用 setState 方法总是会触发 render 方法从而进行 vdom re-render 相关逻辑,哪怕实际上你没有更改到 Compone ...

  5. Git Flow,Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高, 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  6. mysql中trim()函数的用法

    去除左空格函数: LTRIM(str) mysql> SELECT LTRIM(' barbar'); -> 'barbar' 去除右空格函数: RTRIM(str) mysql> ...

  7. JAXB在Java 9/10并且使用Tomcat 9的问题

    Implementation of JAXB-API has not been found on module path or classpath. JAXB API是java EE 的API,jav ...

  8. day76 auth模块 用户验证,

    概要: form组件回顾: (1) 创建form组件对应的类,比如LoginForm (2) views.login: if get请求: form_obj=LoginForm() return re ...

  9. Java实现Windows、Mouse监听器

    1.通过实现WindowListener接口来实现Windows监听器: import java.awt.event.WindowEvent; import java.awt.event.Window ...

  10. 2017-2018-2 20165220『Java程序设计』课程 结对编程练习_四则运算

    需求分析 题目要求 一个命令行程序实现: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 需求理解 输入:需要计算的式子 ...