做了很久的题 有注释

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<map>
  5. #include<math.h>
  6. using namespace std;
  7. int dp[107][107][107];///二维记录上一次 三维记录此次
  8. ///dp[i][k][j]=max(dp[i][k][j],dp[i-1][t][k])+num[j]; t为枚举数且满足与 k j 的条件
  9. ///初始化can num数组减少时间
  10. ///如果不使用can数组来记录 memset都会超时
  11. int can[107];
  12. int num[107];
  13. int n,m;
  14. int c[107];
  15. char s[107];
  16. bool ok(int x)
  17. {
  18. if(x&(x<<1))
  19. return false;
  20. if(x&(x<<2))
  21. return false;
  22. return true;
  23. }
  24. int main(){
  25. while(~scanf("%d%d",&n,&m))
  26. {
  27. for(int i=0;i<n;i++)
  28. {
  29. scanf("%s",s);
  30. c[i]=0;
  31. for(int k=0;k<m;k++)
  32. {
  33. if(s[k]=='H')
  34. c[i]+=(1<<k);
  35. }
  36. }
  37. int w=0;
  38. memset(dp,-1,sizeof(dp));
  39. for(int i=0;i<(1<<m);i++)
  40. {
  41. if(ok(i))
  42. {
  43. can[w]=i;
  44. int x=can[w];
  45. num[w]=0;
  46. while(x>0)
  47. {
  48. if(x&1)num[w]++;
  49. x>>=1;
  50. }
  51. w++;
  52. }
  53. }
  54. for(int i=0;i<w;i++)
  55. {
  56. if(!(can[i]&c[0])) ///得满足条件才能放
  57. dp[0][0][i]=num[i];
  58. }
  59. for(int i=1;i<n;i++)
  60. {
  61. for(int j=0;j<w;j++)
  62. {
  63. if(c[i]&can[j])
  64. continue;
  65. for(int k=0;k<w;k++)
  66. {
  67. if(can[j]&can[k])
  68. continue;
  69. for(int t=0;t<w;t++)
  70. {
  71. if(can[j]&can[t]||can[k]&can[t])
  72. continue;
  73. if(dp[i-1][t][k]==-1) ///如果上一行等于-1说明不满足条件
  74. continue;
  75. dp[i][k][j]=max(dp[i][k][j],dp[i-1][t][k]+num[j]);
  76. }
  77. }
  78. }
  79. }
  80. int ans=0;
  81. for(int k=0;k<n;k++)
  82. for(int i=0;i<w;i++)
  83. for(int j=0;j<w;j++)
  84. {
  85. ans=max(ans,dp[k][i][j]);
  86. }
  87. printf("%d\n",ans);
  88. }
  89. }

  

POJ 1185 经典状压dp的更多相关文章

  1. POJ 3254 & POJ 1185(状压DP入门)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16773   Accepted: 8860 Desc ...

  2. poj 1185 (状压dp)

    Problem 炮兵阵地 题目大意 给你一张n*m的地图,一些地区是空地,一些地区是障碍. 可以在空地上布置炮兵部队,炮兵部队的攻击范围为上下左右各两格. 询问最多可以布置多少个炮兵部队,且互不伤害. ...

  3. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  4. POJ 3254 简单状压DP

    没什么可说的,入门级状压DP.直接撸掉 #include <iostream> #include <cstring> #include <cstdlib> #inc ...

  5. poj -1185 炮兵阵地 (经典状压dp)

    http://poj.org/problem?id=1185 参考博客:http://poj.org/problem?id=1185 大神博客已经讲的很清楚了,注意存状态的时候是从1开始的,所以初始化 ...

  6. Corn Fields POJ - 3254 (状压dp)

    题目链接: Corn Fields  POJ - 3254 题目大意:给你一个n*m的矩阵,矩阵的元素只包括0和1,0代表当前的位置不能放置人,1代表当前的位置可以放人,当你决定放人的时候,这个人的四 ...

  7. hoj 2662 经典状压dp // MyFirst 状压dp

    题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2662 1.引言:用dp解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态. ...

  8. HDU 1074 Doing Homework(经典状压dp)

    题目链接  Doing Homework        Ignatius has just come back school from the 30th ACM/ICPC. Now he has a ...

  9. 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP

    经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...

随机推荐

  1. javascript类的类比详解-大白话版

    转载请注明出处:水车 如果有误,还望指出,谢谢 -----------------正文分割线---------------------- 类:类太抽象,要想弄明白就该用现实的东西来类比 在我看来类就是 ...

  2. intellij 2016注册

    第一种方法: http://idea.qinxi1992.cn http://idea.imsxm.com/ http://107.191.37.186:11688

  3. 最新php环境搭建

    参考文章:http://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.html

  4. oracle的启动过程(各个模式启动)

    启动模式详解 1.NoMount 模式(启动实例不加载数据库) 命令:startup nomount 讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不 ...

  5. vijos 1028 LIS *

    链接:点我 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  6. Inno setup 简单打包教程

    转自:http://blog.csdn.net/ruifangcui7758/article/details/6662646 前段时间关注了VC6.0自带的Installshield打包的使用方法,感 ...

  7. TextView属性大全

    今天研究了TextView一天了,发现网上有一篇讲TextView属性的,非常全,收藏一下先. 发现TextView有一个比较大的问题,就是文字排版的问题,遇到数字,字母,符号等就会有问题,目前还没有 ...

  8. ARP缓存记录种类动态条目和静态条目

    ARP缓存记录种类动态条目和静态条目 为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用.根据缓存的有效期时间,ARP缓存中包含动态和静态条目本文选自ARP协议全面实战手册. 这里首 ...

  9. DOM对象和JQuery对象

    1.JS对象转化为Jquery对象 Var p=document.getElementById(“p”); Var $obj=$(p); 2.Jquery对象转换为JS对象 Var $bh=$(“#i ...

  10. ConversionPattern 解析

    Sample <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] %X{auth} - Line ...