hdu6199 gems gems gems dp+博弈
/**
2017 ACM/ICPC Asia Regional Shenyang Online 解题报告
题目:hdu6199 gems gems gems
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6199
题意:Alice和Bob从左到右取数字,一开始Alice可以取1个或者2个。之后当前者可以取得数字个数为k或者k+1个。
k为上一个人选的数字个数。如果当前者选不到k个或者k+1个,那么游戏结束。
两个人都用最科学的方法取数字。问Alice的total value - Bob的total value最大。
思路:dp+博弈 由于k*(k+1)<=2e4;所以k不超过200;
定义dp[i][k]表示从i开始取数字,可以取k个或者k+1个可以获得的最大差值。 dp[i][k] = max(sum[i+k-1]-dp[i+k][k],sum[i+k]-dp[i+k+1][k+1])-sum[i-1]; 当前自己选的数的和-下一个人可以获得的最大差值=自己可以获得的最大差值。 比赛的时候搞错了题意。。。
时限1000ms
dfs做法超时。
改为递推200多ms。
*/
#include<bits/stdc++.h>
using namespace std;
#define ms(x,y) memset(x,y,sizeof x)
const int maxn = 2e4+;
const int inf = 0x3f3f3f3f;
int n;
int v[maxn], dp[maxn][];
int sum[maxn];
/*
int dfs(int i,int k)
{
if(i+k-1>n) return 0;
if(i+k-1==n) return sum[n]-sum[i-1];
if(vis[i][k]) return dp[i][k];
vis[i][k] = true;
int &res = dp[i][k];
res = max(sum[i+k-1]-sum[i-1]-dfs(i+k,k),sum[i+k]-sum[i-1]-dfs(i+k+1,k+1));
return res;
}*/
int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%d",&n);
for(int i = ; i <= n; i++) scanf("%d",&v[i]);
for(int i = ; i <= n; i++) sum[i] = sum[i-]+v[i];
ms(dp,);
for(int i = n; i >= ; i--){
for(int k = ; k >= ; k--){
if(i+k->n) continue;
if(i+k-==n) dp[i][k] = sum[n]-sum[i-];///选k个。
else{
dp[i][k] = max(sum[i+k-]-dp[i+k][k],sum[i+k]-dp[i+k+][k+])-sum[i-];
}
}
}
printf("%d\n",dp[][]);
}
return ;
} /*
10
3
1 3 2
2
1 -1
3
1 1 1
4
2 2 3 3
2
1 2
*/
hdu6199 gems gems gems dp+博弈的更多相关文章
- codevs 1421 秋静叶&秋穣子(树上DP+博弈)
1421 秋静叶&秋穣子 题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...
- POJ 2068 NIm (dp博弈,每个人都有特定的取最大值)
题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...
- hdu4778:状压dp+博弈
题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...
- UVA 10404 Bachet's Game(dp + 博弈?)
Problem B: Bachet's Game Bachet's game is probably known to all but probably not by this name. Initi ...
- ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)
传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...
- UVA 10891 区间DP+博弈思想
很明显带有博弈的味道.让A-B最大,由于双方都采用最佳策略,在博弈中有一个要求时,让一方的值尽量大.而且由于是序列,所以很容易想到状态dp[i][j],表示序列从i到j.结合博弈中的思想,表示初始状态 ...
- 记忆化dp博弈
题:http://poj.org/problem?id=2068 题意: 有两个队伍A,B,每个队伍有N个人,交叉坐.即是A(1,3,5,7.....)B(2,4,6,8....).告诉你每个mi(1 ...
- POJ 2068 Nim#双人dp博弈
http://poj.org/problem?id=2068 #include<iostream> #include<cstdio> #include<cstring&g ...
- POJ 1678 I Love this Game!#dp博弈
http://poj.org/problem?id=1678 #include<iostream> #include<cstdio> #include<cstring&g ...
随机推荐
- Hibernate 、 Axis2发布
1. you just compile your web-service into aar file (not include bean files), copy the aar into axis2 ...
- PowerDesigner 表模型图展示列信息
今天突然发现表模型不展示列信息了,只显示一个名称,如下图: 虽让点击表模型能看到,但我想让他本身就显示,pd默认就是会显示的,今天不知怎么了,网上找这方面的设置很难找,所以我记录下设置方法(我 ...
- C#合并文件夹图片列表 自定义排版顺序
本次程序编写主要为了将pdf word等文档转换为图片后设置不同的打印排版 前提 目标文件夹中的图片高宽都是一致的 /// <summary> /// 合并图片 /// </summ ...
- POSIX 共享内存和 系列函数
在前面介绍了system v 共享内存的相关知识,现在来稍微看看posix 共享内存 和系列函数. 共享内存简单来说就是一块真正的物理内存区域,可以使用一些函数将这块区域映射到进程的地址空间进行读写, ...
- sqlserver把小数点后面多余的0去掉
Sql中想把小数点后多余的0去掉,怎么办? select 5000/10000.0 --想变成0.5select 5500/10000.0 --想变成0.55select 5550/10000.0 - ...
- VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018
视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...
- 使用xshell远程登录ubuntu使用vi编辑不能使用删除键方向键
近期安装了xshell,远程登录上ubuntu后,在插入模式下,按删除键没有任何反应,按方向键分别打印出A.B.C.D,每个字符一行. 这是因为ubuntu初始化安装的是vi的tiny版本,解决办法安 ...
- linux中计划任务执行脚本
我使用的是ubuntu14.4,所以在ubuntu中一切正常,在其他linux系统中应该都差不多. 1 计划任务,crontab命令选项: -u指定一个用户, -l列出某个用户的任务计 ...
- Solr4:配置Data Import,从数据库直接创建索引
1. 要求 将数据库中的数据直接创建到Solr索引中去.先做全部索引,然后定期做增量索引. 2. 环境 Solr4.4版本,Tomcat7.0版本,Oracle 11g,已经配置好Tomcat与Sol ...
- 漂亮的Qt控件 QSS代码例子
Qt Style Sheets Examples We will now see a few examples to get started with using Qt Style Sheets. S ...