题目大意:

有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球

两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得

成功获得魔法球的人可以再次取

求二者都进行最优策略之后两人所得魔法球个数差

分析:

博弈,数据很小,自然想到了可以搜索所有状态

然后从每一步的子状态中找到对当前人(这一步的先手)最有利的状态即可

直接搜索还是会超时的,于是想到用状态压缩一下,做记忆化搜索

然后其实就是一个状压dp了

通过某个状态对于先手的最优子状态进行转移。。

代码如下

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
typedef struct Node
{
int a,b;
}node;
node dp[];
bool vi[];
int num[][];
int p[];
int g,b,s,k,m,x;
void dfs(int state,int turn)
{
if(state==(<<b)-)
{
dp[state].a=;
dp[state].b=;
return ;
}
if(vi[state])
{
return ;
}
int ok;
node t;
node ans;
ans.a=-;
ans.b=;
int pp[];
memcpy(pp,p,sizeof(pp));
for(int i=;i<b;i++)
{
t.a=;
t.b=;
ok=;
if(state&(<<i))
continue;
int st=state|(<<i); //状态
for(int j=;j<g;j++)
{
p[j]+=num[i][j];
ok+=p[j]/s;
p[j]%=s;
}
int tur=ok?turn:!turn;//是否交换选手
dfs(st,tur);
memcpy(p,pp,sizeof(pp));
t.a+=ok;
if(tur==turn) //子状态的先手所要转移到的状态相同
{
t.a+=dp[st].a;
t.b+=dp[st].b;
}
else //选手交换了
{
t.b+=dp[st].a;
t.a+=dp[st].b;
}
if(t.a-t.b>ans.a-ans.b)
{
ans=t;
}
}
vi[state]=;
dp[state]=ans;
return ;
}
int main()
{
while(scanf("%d%d%d",&g,&b,&s),g+b+s)
{
memset(num,,sizeof(num));
for(int i=;i<b;i++)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
num[i][x-]++;
}
}
memset(p,,sizeof(p));
memset(vi,,sizeof(vi));
dfs(,);
printf("%d\n",dp[].a-dp[].b);
}
return ;
}

hdu4778:状压dp+博弈的更多相关文章

  1. CDOJ 1402 三角形棋盘上的博弈游戏 状压DP

    三角形棋盘上的博弈游戏 题目连接: http://mozhu.today/#/problem/show/1402 Description 柱爷有天上课无聊,于是和同桌卿学姐一起下一种奇特的棋: 棋盘如 ...

  2. AGC 016 F - Games on DAG(状压dp)

    题意 给你一个有 \(n\) 个点 \(m\) 条边 DAG 图,点的标号和拓扑序一致. 现在有两个人进行博弈,有两个棋子分别在 \(1, 2\) 号点上,需要不断移动到它指向的点上. 如果当前两个点 ...

  3. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  4. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  5. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  6. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  7. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  8. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  9. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

随机推荐

  1. java中paint repaint update 之间的关系

    最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...

  2. ie浏览器中 overflow:hidden无作用的解决方案

    原因: overflow:hidden失效 当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidden属性就会失效. 我在ie内发现子 ...

  3. 验证合法的url

    package test; import java.util.regex.Matcher;import java.util.regex.Pattern; public class Test { pub ...

  4. Java 实现Md5算法

    package other; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/* * ...

  5. 怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障

    怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repa ...

  6. mysql Encryption and Compression Functions

    Name Description AES_DECRYPT() Decrypt using AES AES_ENCRYPT() Encrypt using AES COMPRESS() Return r ...

  7. auto and static key words

    ---恢复内容开始--- 对堆栈怎样实现函数调用的描述也同时解释了为什么不能从函数中返回一个指向该函数局部自动变量的指针,例如: 当进入该函数时,自动变量deciduous在堆栈中分配.但函数结束后, ...

  8. 强制转https

    原文:http://blog.csdn.net/wzy_1988/article/details/8549290 需求简介 基于nginx搭建了一个https访问的虚拟主机,监听的域名是test.co ...

  9. CodeFirst解决数据迁移问题

    CodeFirst解决数据迁移问题 分类: 数据库 设计模式 c#2013-04-24 17:56 137人阅读 评论(0) 收藏 举报 工程用的MVC + Entity Framework,根据Co ...

  10. javaScrip中的“?”

    例如window.location.href="./user/userUpdate?id="+id; 在这里“?”是传入参数或是带个参数id,这样就可以获得到主键了. String ...