题意:

  有G种颜色的宝石,共B袋。两个人轮流拿宝石,每次从B袋中拿一袋,把其中的所有宝石倒入一个公共容器,每袋宝石只能取一次。

  当容器中有S个相同颜色的宝石时,将失去这S个宝石,当前操作者得到一个魔法石,每次得到一个魔法石,作为奖励,他都可以再次拿一袋宝石倒入容器。

  双方都想让自己的魔法石尽量多,Alice先手,问在最优操作下,Alice 和 Bob的魔法石差是多少。

  0 <= B <= 21, 0 <= G <= 8, 0 < n <= 10, S < 20。

分析:

  因为数据很小,所以考虑用状态压缩来表示

  对于状态S,若某位为0,则说明该位的袋子没有丢到容器中,若某位位1,则说明该袋子已经丢到了容器中,f[S]表示S状态下,先手-后手的最大值

  显然答案ans=f[0]

  考虑初始情况f[(1<<n)-1]=0(因为这表示所有袋子都已经丢到了容器中,在剩余的袋子中,先手后手都无法取,0-0=0)

  枚举状态S的每一个数字0的位置i

  f[S]由f[S|1<<i]逆推得到

  若将i丢进容器,没有获得魔法石,那么f[S]=max(f[S],-f[S|1<<i]) (因为交换了先手后手顺序)

  若将i丢进容器,获得了魔法石,那么f[S]=max(f[S],f[S|1<<i]+丢进i获得的魔法石) (因为获得了魔法石,所以先手仍旧是先手)

  注意dp过程中计算某个位置的贡献,这是可以预处理的

  复杂度O(2^B * B * G)

最新文章

  1. iOS开发--引用计数与ARC
  2. mysql 命令行操作1
  3. hibernate(七) hibernate中查询方式详解
  4. [Asp.net 5] DependencyInjection项目代码分析
  5. [NOIP2010] 提高组 洛谷P1541 乌龟棋
  6. 51nod1201 整数划分
  7. android Theme使用三
  8. UART RS232 的CTS与RTS
  9. (原)error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
  10. 搭建开发框架Express,实现Web网站登录验证
  11. Spring 使用AspectJ的三种方式
  12. SPOJ DIVCNT2
  13. 整理oracle 树形查询
  14. mysql优化-数据库优化、SQL优化
  15. Android Studio_更新Gradle
  16. sharpsvn 继续,解决文件locked 问题,
  17. 20155205《Java程序设计》实验五(网络编程与安全)实验报告
  18. MySQL数据库与表的增删改查
  19. Codeforces343D(SummerTrainingDay06-F dfs序+线段树)
  20. C# 批量上传

热门文章

  1. 【CSS】3种CSS方法设置元素垂直水平居中
  2. qt5.8 链接mysql错误:driver not load
  3. MVC 附件在线预览
  4. CSS中的趣事之float浮动
  5. list map接口传递
  6. ASP.NET自学之路(转载)
  7. 在计算机中简单的hello程序的运行
  8. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2
  9. librdkafka使用VS2015进行编译
  10. 笔试算法题(10):深度优先,广度优先以及层序遍历 &amp; 第一个仅出现一次的字符