原题传送门

#include<bits/stdc++.h>using namespace std;const int N = 14, M = 1 << 12, mod = 1e8;int n, m;
int g[N];//记录每一行的坑
vector<int> state;
vector<int> head[M];
int f[N][M];//表示第N行放置情况为M的方案数 bool check(int state){//判断每列是否合法 for(int i = 0; i < m; i ++ ){if((state >> i & 1) && (state >> i + 1 & 1))return false;   }return true;
}int main()
{cin>>n>>m;for(int i = 1; i <= n; i ++ ){//从第一行开始,因为以后运算是要按行数,所以行的下标从1开始 for(int j = 0; j < m; j ++ ){int t;cin>>t;g[i] += (!t << j);/*如果这个位置为0,则代表不能种玉米,就将他取反置为1,便于以后相与运算(1代表不能种的地方)以二进制形式左移j位刚好让g[i]以二进制形式储存下第i行的排列情况 */}}for(int i = 0; i < 1 << m; i ++ ){//遍历排查每一列是否是合法情况 if(check(i)){state.push_back(i);}} for(int i = 0; i < state.size(); i ++ ){ for(int j = 0; j < state.size(); j ++ ){int a = state[i], b = state[j];if(!(a & b)){//相与为0即代表这两列没有重合的1的位置 head[i].push_back(j);//记录i状态可以由j状态转移而来 }}}f[0][0] = 1;//第0行状态为0的方案数有1个for(int i = 1; i <= n + 1; i ++ ){for(int a = 0; a < state.size(); a ++ ){for(int b : head[a]){if(g[i] & state[a]) continue;/*如果g[i]和state[a]相与为1,代表这两种排布状态有1重合的情况代表这种情况种植的玉米和部分地皮无法种植冲突 这种情况应该被舍弃,因此直接跳过 */f[i][a] = (f[i][a] + f[i - 1][b]) % mod;//a状态由b状态转移而来 }}} cout<<f[n + 1][0]<<endl;return 0;
}

AcWing 327 玉米田 题解 (动态规划—DP—状态压缩DP)相关推荐

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

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

  2. jzoj1266,P1879-[USACO06NOV]玉米田Corn Fields【状态压缩,dp】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1879 大意 有n*m的矩阵,有些地方可以放,有些不可以放,不可以相 ...

  3. AcWing 327. 玉米田(状态压缩DP)

    AcWing 327. 玉米田(状态压缩DP) 一.问题 二.分析 1.思路 2.状态表示 3.状态转移 4.循环设计 5.初末状态 三.代码 一.问题 二.分析 1.思路 这道题与之前所讲解的AcW ...

  4. acwing 327. 玉米田

    327. 玉米田 题意: m * n的土地,有的土地不育,有的可以种植,要求相邻的土地不能同时种植玉米,问有多少种种植方式 题解: 状压dp,先存每一行可能的状态,然后状态转移,注意相邻不能同时种植除 ...

  5. DP——状态压缩dp

    状态压缩DP 蒙德里安的梦想 分析题目,当我们先摆横着放的方块,再摆放竖着放的方块,当横着放的小方块摆放完后,竖着放的方块也就确定了,因此总方案数应该等于只放横着的小方块的合法方案数.我们考虑每一列可 ...

  6. ACWing 327. 玉米田(状态压缩dp入门)

    农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米. 非常遗憾,部分土地是不育的,无法种植. 而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘. 现在给定土地 ...

  7. AcWing 327 玉米田

    题目描述: 农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米. 非常遗憾,部分土地是不育的,无法种植. 而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘. ...

  8. 【AcWing 327. 玉米田】状压dp

    题目链接 题意: 农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米. 非常遗憾,部分土地是不育的,无法种植. 而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公 ...

  9. 【动态规划】状态压缩动态规划

    整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...

最新文章

  1. java常见面试题总结
  2. Redis数据库(三)——(主从复制、哨兵模式、集群)
  3. java nio.2群发_JAVA NIO TCP SOCKET 聊天群发
  4. .NET Core New csproj 如何发布可执行文件
  5. 如何利用nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查
  6. 老年人学摄影,装备该如何选择?
  7. RedHat7安装及小红帽硬盘分区建议
  8. 【编程题 】年会抽奖(详细注释 易懂)
  9. Java中对象方法的调用过程动态绑定(Dynamic Binding)
  10. html中颜色取样器工具,PS颜色取样器工具使用方法
  11. 内容分发网络(CDN)
  12. 什么是公约数/公因数
  13. 微信小程序图书借阅系统+后台管理系统
  14. Failing because I am unlikely to write too排查方案
  15. 进度条媒体对象和Well组件
  16. 人脸识别系统的matlab仿真
  17. C# 提取Word文档中的图片(用Spire)
  18. 大数据python培训
  19. 飞冰(ICE) 阿里家的前端图形化一键工具
  20. 网站推广的途径有以下几种:

热门文章

  1. 固态硬盘(SSD) 和机 械硬盘(HDD) 优缺点比較
  2. 《AngularJS深度剖析与最佳实践》一2.10 承诺
  3. leetcode 19. 删除链表的倒数第 N 个结点(c++)
  4. Luogu 3807(Lucas定理)
  5. shiro 过滤器 Filter 修改请求url
  6. 利用梆梆加固逻辑漏洞取巧脱壳
  7. 利用comtypes.client批处理dwg文件(AutoCAD二次开发Python)
  8. Unity3D手游开发日记(3) - 场景加载进度条的完美方案
  9. PHP入门《PHP程序设计案例教程》——PHP网站开发
  10. BERT模型--transflow转为pytorch