洛谷P1879:https://www.luogu.org/problemnew/show/P1879

思路

把题目翻译成人话

在n*m的棋盘 每个格子不是0就是1

1表示可以种 0表示不能种 相邻的格子不能同时种 求总方案数

把每行看成一个n位的2进制数 预处理出每行的状态后 进行DP即可

PS:在处理每行的初始状态时 将其取反后更好操作

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. #define mod 100000000
  5. int f[][];
  6. int n,m,ans;
  7. struct State
  8. {
  9. int st[];
  10. int num;
  11. }a[];
  12. void getstate(int i,int t)
  13. {
  14. int num=;//记录此行有几种状态
  15. for(int j=;j<(<<n);j++)//枚举所有状态
  16. {
  17. if((j&t)||(j&(j<<))||(j&(j>>))) continue;//如果冲突就跳过
  18. a[i].st[++num]=j;//记录状态
  19. a[i].num=num;
  20. }
  21. }
  22. void dp()
  23. {
  24. for(int i=;i<=a[].num;i++) f[][i]=;//初始化
  25. for(int i=;i<=m;i++)//枚举行
  26. {
  27. for(int j=;j<=a[i].num;j++)//枚举第i行的状态
  28. {
  29. f[i][j]=;
  30. for(int k=;k<=a[i-].num;k++)//枚举第i-1行的状态
  31. {
  32. if(a[i].st[j]&a[i-].st[k]) continue;//如果冲突就跳过
  33. f[i][j]+=f[i-][k];//累计ans
  34. }
  35. }
  36. }
  37. for(int i=;i<=a[m].num;i++)
  38. ans=(ans+f[m][i])%mod;//累计第m行的所有状态的ans
  39. printf("%d",ans);
  40. }
  41. int main()
  42. {
  43. scanf("%d%d",&m,&n);
  44. for(int i=;i<=m;i++)
  45. {
  46. int t=;//处理当前行的状态
  47. for(int j=;j<=n;j++)
  48. {
  49. int x;
  50. cin>>x;//这里对输入进行取反操作
  51. t=(t<<)+-x;//如1010 存成0101 方便后面判断状态
  52. }
  53. getstate(i,t);//获得此行状态
  54. }
  55. dp();
  56. }

【题解】洛谷P1879 [USACO06NOV] Corn Fields(状压DP)的更多相关文章

  1. P1879 [USACO06NOV]玉米田Corn Fields 状压dp/插头dp

    正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ...

  2. 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)

    洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...

  3. [USACO06NOV]玉米田Corn Fields 状压DP

    题面: 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他的 ...

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

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

  5. POJ 1684 Corn Fields(状压dp)

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

  6. POJ 3254 - Corn Fields - [状压DP水题]

    题目链接:http://poj.org/problem?id=3254 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John ...

  7. 【POJ3254】Corn Fields 状压DP第一次

    !!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...

  8. 洛谷 P1278 单词游戏 【状压dp】

    题目描述 Io和Ao在玩一个单词游戏. 他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致. 游戏可以从任何一个单词开始. 任何单词禁止说两遍,游戏中只 ...

  9. POJ 3254 Corn Fields (状压dp)

    题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻.问有多少种情况. 状压dp入门题,将可以种菜的状态用一个数的二进制表 ...

随机推荐

  1. 【转】spring boot使用Druid和监控配置

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012100371/article/details/76602612 Druid是Java语言中最好 ...

  2. Windows下RSA密钥生成工具openssl

    下载openssl.zip 1. 生成原始 RSA私钥文件 private_key.pem openssl genrsa -out private_key.pem 1024 2. 将原始 RSA私钥转 ...

  3. 【转】mouseover和mouseenter的区别

    一.当绑定着两个事件的元素里面没有子元素的时候,这两个事件的触发效果是一致的: x=0; y=0; $(document).ready(function(){ $("div.over&quo ...

  4. eclipse Java类 红色感叹号 commit失败

    解决方法:  1.进入java类文件所在物理目录 (e:\workspace\myproject\...) 2. 删除多余的版本管理工具的文件或文件夹(如 .svn) 3. 刷新eclipse工程 4 ...

  5. 文字编辑器FCKeditor 简介以及基本配置和使用方法

    什么是FCKeditor FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.它志于轻量化,不需要太复杂的安装步骤即可使用.它可和PHP.JavaScript.ASP.ASP ...

  6. html dl dt dd 标签语法与使用

    一.dl dt dd认识 html <dl> <dt> <dd>是一组合标 […]

  7. 万网云解析全面升级开放,支持海外IP解析!

    基于万网过去18年来的专业域名解析服务经验,万网云解析新版实现了承载超过300万域名的全面升级,它是万网DNS域名解析系统的全新升级,目前已正式发布上线,详见万网首页:http://www.net.c ...

  8. Android sqlite日期存储

    SQLite日期类型是以TEXT.REAL和INTEGER类型分别不同的格式表示的,对应如下:TEXT: "YYYY-MM-DD HH:MM:SS.SSS"REAL: 以Julia ...

  9. Python爬虫教程-27-Selenium Chrome版本与chromedriver兼容版本对照表

    我们使用Selenium+Chrome时,版本不一样, 会导致 chromedriver 停止运行 chromedriver 所有版本下载链接:http://npm.taobao.org/mirror ...

  10. RC4 加解密

    加密解密都是这一个接口 int Rc4EncryptFile(std::string in_file_path, std::string out_file_path, const char *rc4_ ...