HDU 4778 Gems Fight!【博弈+DP】
来源:互联网 发布:电磁场与无线技术 知乎 编辑:程序博客网 时间:2024/04/29 09:55
这个题真的想得超级久都没有思路,想明白了又因为位运算少加个括号调试了将近一个小时,大家都秒出的题我又基本是最后几个交的。今天各种智商不在线。伤心难过受打击。。
题意:
有
分析:
还是分析透彻题目的性质!
1. 首先可以明确,背包最多只有
2. 对于不同局势,先手后手均采取最优策略,所以二者均采取同样的方式拿包。
3. 另外一个重要性质就是两个人拿到魔法石的总数总是确定的!
那么我们就可以得出:
设
状态转移方程:
如果拿某个包产生了新的魔法石,则当前的人可以继续下一轮,即dp[i] = max (dp[i], dp[i|(1<<j)] + ccnt);
否则,换手,那么dp[i] = max (dp[i], res - dp[i|(1<<j)]);
当所有背包都被取即
代码:
#include<cstdio>#include<iostream>#include<cmath>#include<queue>#include<algorithm>#include<cstring>using namespace std;const int maxn = 22, oo = 0x3f3f3f3f;int dp[1<<maxn], cnt[maxn][10],num[maxn];int main (){ int G, B, S; while (scanf ("%d %d %d", &G, &B, &S) && (G + B + S)){ int m, x; memset (cnt, 0, sizeof(cnt)); for (int i = 0; i < B; i++){ scanf ("%d", &m); for (int j = 0; j < m; j++){ scanf ("%d", &x); cnt[i][x] ++; } for(int j = 1; j <= G; j++){ num[j] += cnt[i][j]; } } int sum = 0; for(int i = 1; i <= G; i++){ sum += num[i] / S; } memset(dp, 0, sizeof(dp)); int n = 1 << B; for(int i = n - 2; i >= 0; i--){ memset(num, 0, sizeof(num)); for(int j = 0; j < B; j++){ if(i & (1 << j)){ for(int k = 1; k <=G; k++){ num[k] += cnt[j][k]; } } } int now = 0; for(int j = 1; j <= G; j++){ now += num[j] / S; num[j] %= S; } int res = sum - now; for (int j = 0; j < B; j++){ if ((i & (1<< j)) == 0){ int ccnt = 0; for (int k = 1; k <= G; k++) ccnt += (num[k] + cnt[j][k]) / S; if (ccnt > 0) dp[i] = max (dp[i], dp[i|(1<<j)] + ccnt); else dp[i] = max (dp[i], res - dp[i|(1<<j)]); } } } printf ("%d\n", 2 * dp[0] - sum); } return 0;}
0 0
- [博弈dp] hdu 4778 Gems Fight!
- HDU 4778 Gems Fight! 状压DP+博弈
- HDU 4778 Gems Fight!【博弈+DP】
- hdu 4778 Gems Fight! 状压dp+博弈
- hdu 4778 Gems Fight! (状态压缩dp+博弈)
- HDU 4778 Gems Fight! (博弈+状压DP)
- HDU 4778 Gems Fight!(dp)
- hdu 4778 Gems Fight!(状压+博弈)
- HDU 4778 Gems Fight! (状态压缩 + 博弈)
- HDU 4778 Gems Fight!(博弈+状压)
- hdu-4778-Gems Fight!---状态压缩dp
- hdu 4778 Gems Fight!(状态压缩dp)
- HDU 4778 Gems Fight! 状态压缩dp
- hdu 4778 Gems Fight!(2013 杭州 现场赛 I 题) 总和一定的博弈,dp
- HDU 4778 Gems Fight!(13年杭州区域赛-I题-博弈DP)
- HDU 4778 Gems Fight! [博弈+状压DP(记忆化搜索)]
- HDU 4778 Gems Fight!(13年杭州区域赛-I题-博弈DP)
- hdu 4778 Gems Fight!
- UVA 1635-Irrelevant Elements(唯一分解定理)
- inline-block-inline-block的简单区别
- UVA624 - CD (DFS)
- Ubuntu14.04如何安装32位兼容库,即ia32-libs
- Android手机应用接口大全
- HDU 4778 Gems Fight!【博弈+DP】
- 【bzoj1823】[JSOI2010]满汉全席 2-sat
- python 调用数据库
- 算法 把二叉查找树转变成排序的双向链表
- HYSBZ 2243 树链剖分
- 中山培训 2016.7.9
- linux中断分层技术分析
- shell学习笔记
- 向文件中添加行