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个包,每一个包里有若干个宝石,给出宝石的颜色. ...
随机推荐
- Android系统中默认值的意义列表
转自:http://blog.csdn.net/yabg_zhi_xiang/article/details/51727844 在SettingsProvider中设置系统中默认值,我们可以在fram ...
- Win10开机提示Resume from Hibernation该怎么办?
Windows10系统的电脑开机提示:Resume from Hibernation(从休眠恢复),这是电脑没有真正关机,而是上次关机时进入了[休眠状态],所以开机时提示:从休眠恢复.如何解决Wind ...
- Oracle锁定和解锁用户的命令
转:http://database.51cto.com/art/200910/158576.htm 在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用 ...
- css2
CSS 实现div宽度根据内容自适应 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- html5 简单音乐播放器
html5 简单音乐播放器 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> < ...
- thinkphp计划任务使用cronRun
thinkphp计划任务使用cronRun .先不管是是否是独立分组,必须在你项目名下的Conf文件夹内创建2个文件一个是tages.php 一个是 crons.php. 注意这两个文件名为think ...
- java调用shell获取返回值
转自:http://blog.csdn.net/tengdazhang770960436/article/details/12014839 1.shell文件return.sh echo 1 echo ...
- APP设计尺寸规范大全,APP界面设计新手教程【官方版】(转)
正值25学堂一周年之际,同时站长和APP设计同仁们在群里(APP界面设计 UI设计交流群,APP界面设计⑥群 APPUI设计③群58946771 APP设计资源⑤群 386032923欢迎大家加入交流 ...
- C语言字符串长度(转)
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...
- Understanding Kafka Consumer Groups and Consumer Lag
In this post, we will dive into the consumer side of this application ecosystem, which means looking ...