HDU 4778 Gems Fight!(DP)
当我放弃的时候过了。sb啊,卡常数!!!
换了好几个姿势,本来没写预处理,预处理+俩剪枝,尼玛就过了。。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
#define LL __int64
int bag[][];
int sum[];
int dp[<<];
int bg[<<][];
int g,b,s;
int temp[];
int dfs(int x)
{
int maxz = ,i,j,flag,st;
if(dp[x] != -)
return dp[x];
for(i = ;i < b;i ++)
{
if((x&(<<i)) == )
{
flag = ;
st = ;
for(j = ;j < g;j ++)
{
flag += bg[x|(<<i)][j]/s - bg[x][j]/s;
st += sum[j]/s - bg[x|(<<i)][j]/s;
}
if(flag)
{
if(maxz >= st + flag) continue;//剪枝就是这两个剪枝
if(maxz < dfs(x|(<<i))+flag)
maxz = dfs(x|(<<i))+flag;
}
else
{
if(maxz >= st) continue;//剪枝
if(maxz < st - dfs(x|(<<i)))
maxz = st - dfs(x|(<<i));
}
}
}
return dp[x] = maxz;
}
int main()
{
int i,j,k,n,num,sp,sa,sb;
while(scanf("%d%d%d",&g,&b,&s)!=EOF)
{
if(g == &&b == &&s == )
break;
for(i = ;i < (<<b);i ++)
{
dp[i] = -;
for(j = ;j < g;j ++)
bg[i][j] = ;
}
for(i = ;i < b;i ++)
{
for(j = ;j < g;j ++)
{
bag[i][j] = ;
}
}
for(j = ;j < g;j ++)
{
sum[j] = temp[j] = ;
}
for(i = ;i < b;i ++)
{
scanf("%d",&n);
for(j = ;j <= n;j ++)
{
scanf("%d",&num);
bag[i][num-]++;
sum[num-] ++;
}
}
for(i = ;i < (<<b);i ++)//扯淡的预处理
{
for(j = ;j < b;j ++)
{
if(i&(<<j))
{
for(k = ;k < g;k ++)
bg[i][k] += bag[j][k];
}
}
}
sp = ;
for(i = ;i < g;i ++)
{
sp += sum[i]/s;
}
sa = dfs();
sb = sp - sa;
printf("%d\n",sa-sb);
}
return ;
}
HDU 4778 Gems Fight!(DP)的更多相关文章
- hdu 4778 Gems Fight! 博弈+状态dp+搜索
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...
- Hdu 4778 Gems Fight! (状态压缩 + DP)
题目链接: Hdu 4778 Gems Fight! 题目描述: 就是有G种颜色,B个背包,每个背包有n个宝石,颜色分别为c1,c2............两个人轮流取背包放到公共容器里面,容器里面有 ...
- hdu 4778 Gems Fight! 状压dp
转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...
- hdu 4778 Gems Fight! 状态压缩DP
Gems Fight! Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others)T ...
- HDU 4778 Gems Fight! (2013杭州赛区1009题,状态压缩,博弈)
Gems Fight! Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others)T ...
- hdu 4778 Gems Fight!
第一次写状压dp-- 题意:http://blog.csdn.net/dyx404514/article/details/15506601 状压dp+博弈吧-- #include<iostrea ...
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- 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 ...
- hdu 4778 Rabbit Kingdom(减少国家)
题目链接:hdu 4778 Rabbit Kingdom 题目大意:Alice和Bob玩游戏,有一个炉子.能够将S个同样颜色的宝石换成一个魔法石.如今有B个包,每一个包里有若干个宝石,给出宝石的颜色. ...
随机推荐
- wp8 入门到精通 聊天控件
<Grid > <Grid x:Name="bubble_right" VerticalAlignment="Center" RenderTr ...
- 真机测试INSTALL_FAILED_INSUFFICIENT_STORAGE 的解决方法
来源:http://blog.csdn.net/aikongmeng/article/details/9793809 INSTALL_FAILED_INSUFFICIENT_STORAGE 的解决方法 ...
- WINDOWS页式内存管理解析
jpg 改 rar
- 性能优化之Java(Android)代码优化
最新最准确内容建议直接访问原文:性能优化之Java(Android)代码优化 本文为Android性能优化的第三篇——Java(Android)代码优化.主要介绍Java代码中性能优化方式及网络优化, ...
- [工作中的设计模式]建造者模式builder
一.模式解析 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 以上是对建造者模式的官方定义,简单说就是对于复杂对象 ...
- jquery的siblings()
jquery 点击 感兴趣 感兴趣变为 蓝色 去掉onclick事件 不感兴趣 变为 黑色 加上点击事件 点击 不感兴趣 不感兴趣变为 蓝色 去掉onclick 感兴趣 变为 黑色 加上点击事件 ht ...
- jQuery-认识JQuery,jQuery选择器
认识JQuery: 1.window.onload与$(document).ready()的区别 window.onload $(document).ready() 执行时机 必须等待网页中的所有内容 ...
- Floyd_Warshall POJ 1847 Tram
题目传送门 题意:这题题目难懂.问题是A到B最少要转换几次城市.告诉每个城市相连的关系图,默认与第一个之间相连,就是不用转换,其余都要转换. 分析:把第一个城市权值设为0, 其余设为0.然后Floyd ...
- Oralce 常用语句
注:大写代表需要替换掉额 --更新字段名 alter table TABLE rename column COL_OLD to COL_NEW --添加字段名 alter table TABLE ad ...
- start bbs轻论坛安装时数据库提示错误
A PHP Error was encounteredSeverity: NoticeMessage: Only variable references should be returned by r ...