解题思路

原题链接》》玉米田弱化版
哦,还有》》弱化版解题报告

注意到“弱化版”三个大字了吗,对的,gmoj就是这么狗,原本看到题还高兴了好久,“做过??”——“不可能的”

好吧,回到这个加强版。
我们设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示填到第i行j列的时候,已经填过的部分的轮廓的状态是 k k k,“轮廓是什么??”,图解如下》》

然后就常规操作,正常的判断和转移,代码中有详细注释。
非常非常狗的是,就这样还是过不了很**的最后两个点,要加一个超长火车头和优化取模运算。

PS:注意到 n < = 19 n<=19 n<=19,而f的大小为 19 ∗ 19 ∗ ( 1 < < 19 ) 19*19*(1<<19) 19∗19∗(1<<19),在 g m o j gmoj gmoj的狗空间限制中会炸,要开滚动数组。


代码

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>using namespace std;const int MOD=100000000;
int m,n,x,l,ans,tot,v[1<<19],f[2][1<<19],a[20][20];int main(){freopen("cowfood.in","r",stdin);freopen("cowfood.out","w",stdout);scanf("%d%d",&m,&n);for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){scanf("%d",&x);a[i][j]=x;} }l=(1<<n);//所有状态f[0][0]=1;for(int i=1;i<=m;i++){for(int j=0;j<n;j++)//我这里是从右往左填,从0开始为了后面位运算码代码方便{tot^=1;//滚动数组memset(f[tot],0,sizeof(f[tot]));//记得清零,否则会重复计算for(int k=0;k<l;k++)//枚举填上一个空时边缘的状态{int w=(1<<j)&k;if(w)//特判:若我的上一行j列填了1,这一行j列就填不了{f[tot][k^(1<<j)]+=f[tot^1][k];if(f[tot][k^(1<<j)]>MOD)f[tot][k^(1<<j)]-=MOD;continue;//优化取模}if(!a[i][j+1]|(1<<j-1)&k)//特判:如果当前位置不能填,或相邻的右边填了1,让自己也填不了{f[tot][k]+=f[tot^1][k];if(f[tot][k]>MOD)f[tot][k]-=MOD;continue;}f[tot][k^(1<<j)]+=f[tot^1][k];//填if(f[tot][k^(1<<j)]>MOD)f[tot][k^(1<<j)]-=MOD;f[tot][k]+=f[tot^1][k];//不填if(f[tot][k]>MOD)f[tot][k]-=MOD;}}}for(int i=0;i<l;i++){ans+=f[tot][i];if(ans>MOD)ans-=MOD;}printf("%d",ans);
}

无敌火车头??

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

(纪中)7199. 玉米田【状压DP】相关推荐

  1. AcWing327.玉米田(状压DP)题解

    Acwing.玉米田(状压DP) 题目传送门 题目描述 农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米. 非常遗憾,部分土地是不育的,无法种植. 而且,相邻的土地不能同时种植玉米,也就是 ...

  2. 状压dp之二之三 炮兵阵地/玉米田 By cellur925

    一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...

  3. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

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

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

  5. AcWing 327. 玉米田(棋盘式状压dp 十字形)

    本题与上一题AcWing 1064. 小国王(棋盘式状压dp)几乎一致,只不过上一题是"井字形的约束摆放",而本题是"十字形的约束摆放",即:当前位置上下左右 ...

  6. [状压dp] 洛谷 P1879 玉米田

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

  7. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

  8. 状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)

    本次博客,主要是给学弟学妹们讲解一下状压dp,不适合有基础的同学观看,可能会浪费时间,因为偏基础 先来最简单的一个吧   http://acm.hdu.edu.cn/showproblem.php?p ...

  9. DP模型——状压DP

    文章目录 前言 什么是状态压缩DP 基本例题1 前期思考 状态表示 状态计算 Code 基本例题2 前期思考 状态表示 状态计算 Code 扩展 棋盘式 小国王 思考 状态表示 状态计算 Code 玉 ...

  10. 牛客题单_动态规划课程状压dp习题

    牛客题单_动态规划课程状压dp习题 文章目录 牛客题单_动态规划课程状压dp习题 NC14732 锁 NC15034 德玛西亚万岁 NC16418 宝藏 NC17061 多彩的树 NC17890 方格 ...

最新文章

  1. 把时间当作朋友(四)
  2. 为什么网易在2016年大举进军云计算?
  3. hadoop集群崩溃恢复记录
  4. 静态链接库与动态链接库
  5. 比特精灵最新稳定版v3.6.0.401(转)
  6. RabbitMq--AMQP高级消息队列协议--简单了解
  7. zoj 1372
  8. 有需要【JavaScript权威指南第七版、JavaScript高级程序设计第四版】的可以私信我哈
  9. 象棋游戏java代码_象棋游戏 - java代码库 - 云代码
  10. 【java初学】正则表达式和敏感词汇过滤
  11. Windows 7下手动搭建Asp和PHP集成环境
  12. 计算机服务无法启动,Win7系统下windows firewall服务无法启动怎么解决【图文】
  13. 开发人员必备的四象限壁纸
  14. 知识付费平台包括哪些功能版块?
  15. GPC规范--安全域基础概念
  16. 剑指offer_3 -- 构建乘积数组
  17. TRecgNet:基于转换识别网络进行RGB-D场景识别
  18. 小学计算机学科知识与能力,学科知识与能力:计算机基础知识模块知识点分析...
  19. 9大时序异常检测方法汇总
  20. STB 应用手册术语 2 - CA,EPG,VOD,CDN

热门文章

  1. 民用电力远程监控解决方案
  2. 快到我的碗里来!瑞典艺术家创作人体美食
  3. http接口与webservice接口
  4. html5果树,这5种阳台果树,产量高好养活,当年就能结果,再也不买水果吃了
  5. wave数据格式_在关闭之前先从Google Wave导出和备份数据
  6. 教你如何找回被盗QQ的好友
  7. mysql 解压版启动失败_解压版mysql 错误-mysql启动失败
  8. MATLAB算法实战应用案例精讲-【深度学习】多尺度特征提取(论文篇一)
  9. openGauss数据库开发指导手册(上)
  10. 【趣味】适合写在/etc/motd,佛祖保佑,永不宕机,大全