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个包,每一个包里有若干个宝石,给出宝石的颜色. ...
随机推荐
- 【翻译十】java-固定锁和同步
Intrinsic Locks and Synchronization Synchronization is built around an internal entity known as the ...
- JAVA 堆栈知识和Volatile关键字
栈内存:存放基本类型的变量和对象的引用 堆内存:存放用new创建的对象和数组 栈帧:保存了局部变量表,操作数栈,方法的返回地址以及其它的附加信息 volatile修饰的变量,jvm虚拟机只是保证从主内 ...
- maven File encoding has not been set
原pom.xml配置文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- 第十九篇:提高SOUI应用程序渲染性能的三种武器
SOUI是一套100%开源的基于DirectUI的客户端开发框架. 基于DirectUI设计的UI虽然UI呈现的效果可以很炫,但是相对于传统的win32应用程序中每个控件一个窗口句柄的形式,渲染效率是 ...
- 函数fseek() 用法(转)
在阅读代码时,遇到了很早之前用过的fseek(),很久没有用了,有点陌生,写出来以便下次查阅. 函数功能是把文件指针指向文件的开头,需要包含头文件stdio.h fseek 函数名: fseek ...
- 2016北京网络赛 hihocoder 1391 Countries 树状数组
Countries 描述 There are two antagonistic countries, country A and country B. They are in a war, and ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap
1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...
- Vue入门笔记#过渡
Vue过渡,可以在元素从DOM中移除,插入时自动调用过渡效果.根据设定,会适时的触发过渡效果. 在使用的目标标签里添加 transition: <div transition="my_ ...
- h5嵌入视频遇到的bug及总结---转载
最近做的一个h5活动因为嵌入视频而发现了好多以前从未发现的问题,在测试的时候不同系统不同版本不同环境等多多少少都出现了些问题,搞得我也是焦头烂额的,不过好在最终问题都解决了,自己也学到了好多东西,为了 ...
- FreeMarker学习(宏<#macro>的使用)
原文链接:https://my.oschina.net/weiweiblog/blog/506301?p=1 用户定义指令-使用@符合来调用 有两种不同的类型:Macro(宏)和transform( ...