7_11_I题 Gems Fight!(状压dp)
2016-09-04 15:37
337 查看
7_11_I题 Gems Fight!(状压dp)
简单题意
有G种颜色的宝石放在B个包里,两人轮流拆包,把里面的宝石取出放到一个锅里,如果有S个相同颜色的宝石,他们就会融合成一个魔法石,如果得到了新的魔法石,当前的操作员可以获得额外一次的操作机会,问两人都在最优取法下,两人的分差是多少思路
因为两人是共用一个锅,且两人都是最优取法,所以两人的取法实际是固定的,最后得到的魔法石的总数也是固定的,可以用一个二进制数来表示当前包被打开的状态。然后dp[statue]表示包的打开状态为statue时,先手的人获得的魔法石数,设下次选择能构成N个魔法石(这个可以预处理出来)遍历出所有的next_statue
如果 N > 0,则不换人:
dp[statue]=max(dp[s<
4000
span class="mi" id="MathJax-Span-162" style="font-family: MathJax_Math-italic;">tatue],dp[next_statue]+N)
否则 换人:设剩余状态可获取的魔法石数为P
dp[statue]=max(dp[statue],P−dp[next_statue])
预处理出所有状态的剩余可获取魔法石数,再记忆化搜索一下就行了。
代码
#include <bits/stdc++.h> using namespace std; const int maxn = 1 << 21; int n; int dp[maxn], score[maxn]; int a[25][10],sum[10]; int dfs(int statue){ int res = 0; if(dp[statue]) return dp[statue]; for(int i = 0; i < n; i++) if(statue & (1<<i)){ int next_statue = statue ^ (1 << i); int dif = score[next_statue] - score[statue]; if(dif > 0) //有融合,不换人 res = max(res, dif + dfs(next_statue)); else {//没有融合换人 int le = score[0] - score[statue];//剩下的分数 res = max(res, le - dfs(next_statue)); } } return dp[statue] = res; } int main(){ int g,s; while(~scanf("%d%d%d", &g, &n, &s) && g){ memset(a, 0, sizeof a ); memset(dp, 0 , sizeof dp); for(int i = 0; i < n; i++){ int t, co; scanf("%d", &t); while(t--){ scanf("%d", &co); a[i][co]++; } } for(int statue = 0; statue < (1 << n); statue++){ memset(sum, 0, sizeof(sum)); for(int i = 0; i < n; i++) if((statue & (1<<i)) ^ (1 << i)) for(int k = 1; k <= g; k++) sum[k] += a[i][k]; score[statue] = 0; for(int i = 1; i <= g; i++) score[statue] += sum[i] / s; } printf("%d\n", 2 * dfs((1 << n) - 1) - score[0]); } return 0; }
相关文章推荐
- Android手势识别
- 7_11_ H题 Rabbit Kingdom(容斥+树状数组)
- NCPC 2014 H clock pictures
- 关于操作系统需要掌握的一些基本常识
- Hibernate缓存
- Add Two Numbers(medium)
- Windows下将gvim添加到右键菜单
- 7_11_ F题 Infinite Go(并查集)
- HTML中表格布局的优缺点
- PHP中header的用法详解
- Python使用paramiko进行SSH和SFTP连接
- 智能指针(一)
- java学习日记_16:面向对象之匿名对象。07.03
- poj1236(强连通分量)
- USB device stack
- 模式识别之统计判决
- 6.CControlUI的大小及位置
- 7_11_A题 Lights Against Dudely [HDU 4770] (状态压缩+暴力)
- 白噪声、 带限白噪声、色噪声之间的相同与差异
- Hadoop/Spark平台搭建