hdu 4778 Gems Fight!
第一次写状压dp……
题意:http://blog.csdn.net/dyx404514/article/details/15506601
状压dp+博弈吧……
#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int dp[2100000];
int bag[21][8];
int g,b,s;
int dfs(int state,int *remain,int all)
{
int t[8];
int i,sum,j;
if(state==0||all==0)
return 0;
if(dp[state]!=-1)
return dp[state];
for(i=0;i<b;i++)
{
if((state>>i)&1)
{
sum=0;
for(j=0;j<g;j++)
{
t[j]=bag[i][j]+remain[j];
sum+=t[j]/s;
t[j]%=s;
}
if(sum)
{
if(dp[state]==-1)
dp[state]=sum+dfs(state^(1<<i),t,all-sum);
else
dp[state]=max(dp[state],sum+dfs(state^(1<<i),t,all-sum));
}
else
{
if(dp[state]==-1)
dp[state]=all-dfs(state^(1<<i),t,all);
else
dp[state]=max(dp[state],all-dfs(state^(1<<i),t,all));
}
}
}
return dp[state];
}
int main()
{
int i,j,t,n,sum;
int remain[8];
while(scanf("%d%d%d",&g,&b,&s)&&g||b||s)
{
memset(bag,0,sizeof(bag));
for(i=0;i<b;i++)
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&t);
bag[i][t-1]++;
}
}
sum=0;
for(i=0;i<g;i++)
{
t=0;
for(j=0;j<b;j++)
t+=bag[j][i];
sum+=t/s;
}
memset(dp,-1,sizeof(dp));
memset(remain,0,sizeof(remain));
printf("%d\n",2*dfs((1<<b)-1,remain,sum)-sum);
}
return 0;
}
hdu 4778 Gems Fight!的更多相关文章
- 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
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
转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...
- HDU 4778 Gems Fight!(DP)
题目链接 当我放弃的时候过了.sb啊,卡常数!!! 换了好几个姿势,本来没写预处理,预处理+俩剪枝,尼玛就过了.. #include <stdio.h> #include <stri ...
- hdu 4778 Rabbit Kingdom(减少国家)
题目链接:hdu 4778 Rabbit Kingdom 题目大意:Alice和Bob玩游戏,有一个炉子.能够将S个同样颜色的宝石换成一个魔法石.如今有B个包,每一个包里有若干个宝石,给出宝石的颜色. ...
- 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 ...
随机推荐
- Zend Studio / Eclipse 缩进设置
首先是Window – Preferences打开Preferences配置对话框: 然后依次找到PHP – Code Style – Formatter,如下图所示: 这里注意一下Active pr ...
- spring封装的RabbitMQ
spring这么牛逼的团队,封装了RabbitMQ,简化了RabbitMQ的使用,那肯定是要使用spring-rabbit了 一.简介 二.使用方法 1.消费者 public class Foo { ...
- Python学习-初始列表
初始列表 列表中的排放是没有顺序的并且可以被修改 在列表中你可以放入任何的元素类型.字符串,数字,布尔值等等,甚至还可以进行列表的嵌套 列表的注意特征:用中括号包围,中间用逗号分隔开 list = [ ...
- 两种js下载文件的方法(转)
function DownURL(strRemoteURL, strLocalURL){ try{ var xmlHTTP = new ActiveXObject("Microsoft.XM ...
- php与mysql事物处理
PHP与MYSQL事务处理 mysql事物特性 (原子性,一致性,隔离性,持久性) /*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事 ...
- mybatis中<![CDATA[]]>的作用
此篇文章引自QH_JAVA的文章 在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用 ...
- python装饰器、迭代器、生成器
装饰器:为已存在的函数或者或者对象添加额外的功能 def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事' ...
- kvm:日常使用
常用命令 创建新镜像:qemu-img create -f qcow2 /var/lib/libvirt/images/$1.img 100G 创建新镜像:qemu-img create -f qco ...
- C++解决大数组问题
今天写一个C++小程序,竟然出现:"VS 未经处理的异常: 0xC00000FD: Stack overflow" 查了一下,普通数组变量是在堆栈中保存的,而堆栈空间有限,故出此错 ...
- odoo权限配置讲解2
今天我们在来讲解一下odoo中配合使用公司开发的权限配置模块,简单配置odoo权限的操作说明 接着上篇讲到的,昨天我们只是做了一个简单的表单模型的筛选规则 今天来讲解一下如何在创建内贸报价单的时候,在 ...