题目链接

当我放弃的时候过了。sb啊,卡常数!!!

换了好几个姿势,本来没写预处理,预处理+俩剪枝,尼玛就过了。。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include <queue>
  5. using namespace std;
  6. #define INF 0x3f3f3f3f
  7. #define LL __int64
  8. int bag[][];
  9. int sum[];
  10. int dp[<<];
  11. int bg[<<][];
  12. int g,b,s;
  13. int temp[];
  14. int dfs(int x)
  15. {
  16. int maxz = ,i,j,flag,st;
  17. if(dp[x] != -)
  18. return dp[x];
  19. for(i = ;i < b;i ++)
  20. {
  21. if((x&(<<i)) == )
  22. {
  23. flag = ;
  24. st = ;
  25. for(j = ;j < g;j ++)
  26. {
  27. flag += bg[x|(<<i)][j]/s - bg[x][j]/s;
  28. st += sum[j]/s - bg[x|(<<i)][j]/s;
  29. }
  30. if(flag)
  31. {
  32. if(maxz >= st + flag) continue;//剪枝就是这两个剪枝
  33. if(maxz < dfs(x|(<<i))+flag)
  34. maxz = dfs(x|(<<i))+flag;
  35. }
  36. else
  37. {
  38. if(maxz >= st) continue;//剪枝
  39. if(maxz < st - dfs(x|(<<i)))
  40. maxz = st - dfs(x|(<<i));
  41. }
  42. }
  43. }
  44. return dp[x] = maxz;
  45. }
  46. int main()
  47. {
  48. int i,j,k,n,num,sp,sa,sb;
  49. while(scanf("%d%d%d",&g,&b,&s)!=EOF)
  50. {
  51. if(g == &&b == &&s == )
  52. break;
  53. for(i = ;i < (<<b);i ++)
  54. {
  55. dp[i] = -;
  56. for(j = ;j < g;j ++)
  57. bg[i][j] = ;
  58. }
  59. for(i = ;i < b;i ++)
  60. {
  61. for(j = ;j < g;j ++)
  62. {
  63. bag[i][j] = ;
  64. }
  65. }
  66. for(j = ;j < g;j ++)
  67. {
  68. sum[j] = temp[j] = ;
  69. }
  70. for(i = ;i < b;i ++)
  71. {
  72. scanf("%d",&n);
  73. for(j = ;j <= n;j ++)
  74. {
  75. scanf("%d",&num);
  76. bag[i][num-]++;
  77. sum[num-] ++;
  78. }
  79. }
  80. for(i = ;i < (<<b);i ++)//扯淡的预处理
  81. {
  82. for(j = ;j < b;j ++)
  83. {
  84. if(i&(<<j))
  85. {
  86. for(k = ;k < g;k ++)
  87. bg[i][k] += bag[j][k];
  88. }
  89. }
  90. }
  91. sp = ;
  92. for(i = ;i < g;i ++)
  93. {
  94. sp += sum[i]/s;
  95. }
  96. sa = dfs();
  97. sb = sp - sa;
  98. printf("%d\n",sa-sb);
  99. }
  100. return ;
  101. }

HDU 4778 Gems Fight!(DP)的更多相关文章

  1. hdu 4778 Gems Fight! 博弈+状态dp+搜索

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...

  2. Hdu 4778 Gems Fight! (状态压缩 + DP)

    题目链接: Hdu 4778 Gems Fight! 题目描述: 就是有G种颜色,B个背包,每个背包有n个宝石,颜色分别为c1,c2............两个人轮流取背包放到公共容器里面,容器里面有 ...

  3. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  4. hdu 4778 Gems Fight! 状态压缩DP

    Gems Fight! Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)T ...

  5. HDU 4778 Gems Fight! (2013杭州赛区1009题,状态压缩,博弈)

    Gems Fight! Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)T ...

  6. hdu 4778 Gems Fight!

    第一次写状压dp-- 题意:http://blog.csdn.net/dyx404514/article/details/15506601 状压dp+博弈吧-- #include<iostrea ...

  7. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  8. hdu 6169 gems gems gems【DP】

    题目链接:hdu 6169 gems gems gems Now there are n gems, each of which has its own value. Alice and Bob pl ...

  9. hdu 4778 Rabbit Kingdom(减少国家)

    题目链接:hdu 4778 Rabbit Kingdom 题目大意:Alice和Bob玩游戏,有一个炉子.能够将S个同样颜色的宝石换成一个魔法石.如今有B个包,每一个包里有若干个宝石,给出宝石的颜色. ...

随机推荐

  1. APP消息推送:通知和透传

    目前市场上的消息推送方式有两种:通知和透传.什么是透传?透传即是透明传送,即传送网络无论传输业务如何,只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,而不对传输的业务进行处理.透传消息, ...

  2. android:id="@id/resid" , andorid:id="@+id/resid" 的区别

    的区别?android:id="@id/resid"    // 引用现有的资源idandorid:id="@+id/resid"  // 新增一个资源id i ...

  3. 拷贝,集合,函数,enumerate,内置函数

    1.拷贝 字符串和数字.赋值 id一样 import copy #提供拷贝功能 copy.copy() #原来的和现在的一起修改,不用修改时用浅copy,节省内存,复制最外层 copy.deepcop ...

  4. poj 1003:Hangover(水题,数学模拟)

    Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 99450   Accepted: 48213 Descri ...

  5. HDU3359 Kind of a Blur(高斯消元)

    建立方程后消元 #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring& ...

  6. NS 802.11函数分析(一)

    recv函数有两个作用,不仅是接收其他节点发送的包,而且当节点接收到其他包的时候也会调用recv() 首先给出NS2中recv的源码,和一些注释: void Mac802_11::recv(Packe ...

  7. hdu 4389 数位dp

    求区间内满足x%fx==0的数的个数,fx为该数各个位数上的数字之和Sample Input21 1011 20 Sample OutputCase 1: 10Case 2: 3 大小不是你想开,想开 ...

  8. Mac系统修改Intellij Idea默认JDK版本

    Intellij IDEA 默认情况下,使用的jdk的版本是1.6,当第一次启动IDEA的时候,如果系统中未安装jdk,则系统会自动到苹果官网下载jdk安装文件.如果你的系统已经安装了jdk1.7或是 ...

  9. 通过PID获取进程路径的几种方法

    通过PID获取进程路径的几种方法 想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vis ...

  10. EventBus代替Intent将复杂对象传递给下一个即将启动的Activity

    我觉得EventBus确实非常好,把我们从序列化中解脱出来,即使不序列化也能在界面间传递数据,但是有个前提,那是两个界面都已经存在并且注册了EventBus.而即将启动的下一个Activity就非常尴 ...