/**
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+博弈的更多相关文章

  1. codevs 1421 秋静叶&秋穣子(树上DP+博弈)

    1421 秋静叶&秋穣子   题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...

  2. POJ 2068 NIm (dp博弈,每个人都有特定的取最大值)

    题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...

  3. hdu4778:状压dp+博弈

    题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...

  4. 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 ...

  5. ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)

    传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...

  6. UVA 10891 区间DP+博弈思想

    很明显带有博弈的味道.让A-B最大,由于双方都采用最佳策略,在博弈中有一个要求时,让一方的值尽量大.而且由于是序列,所以很容易想到状态dp[i][j],表示序列从i到j.结合博弈中的思想,表示初始状态 ...

  7. 记忆化dp博弈

    题:http://poj.org/problem?id=2068 题意: 有两个队伍A,B,每个队伍有N个人,交叉坐.即是A(1,3,5,7.....)B(2,4,6,8....).告诉你每个mi(1 ...

  8. POJ 2068 Nim#双人dp博弈

    http://poj.org/problem?id=2068 #include<iostream> #include<cstdio> #include<cstring&g ...

  9. POJ 1678 I Love this Game!#dp博弈

    http://poj.org/problem?id=1678 #include<iostream> #include<cstdio> #include<cstring&g ...

随机推荐

  1. HDUOJ--1159Common Subsequence

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. 【java设计模式】之 责任链(chain of resposibility)模式

    责任链模式,顾名思义,就是一条链.这个链到底是怎么运行的呢?它主要是将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给 ...

  3. jquery动态绑定事件

    什么是动态绑定? 动态绑定是指动态添加的DOM节点或者html元素,他们最开始时运行的时候是不存在的.如果要给这些动态加入的节点增加事件,就必须要用jquery的on方法来绑定事件. $('.cont ...

  4. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

  5. 转 python 读取中文文件名/中文路径

    python直接读取中文路径的文件时失败,可做如下处理: inpath = 'D:/work/yuanxx/在线导航/驾车导航/walk_log/20130619_172355.txt' uipath ...

  6. OGG_GoldenGate安装和环境搭建(案例)

    2014-03-02 Created By BaoXinjian

  7. Hibernate的like用法

    直接写String sql = "from ClientInfo as a where a.client_name like '%"+ clientname+"%'&qu ...

  8. window 环境 Composer 安装 thinkphp5

    参考链接:https://www.kancloud.cn/thinkphp/thinkphp5_quickstart/478269 在 Windows 中,你需要下载并运行 Composer-Setu ...

  9. Installing .NET Core on Ubuntu-摘自网络

    Installing .NET Core on Linux By Zlatko Knezevic These instructions will lead you through acquiring ...

  10. 常见的web负载均衡方法总结

    Web负载均衡的方法有很多,下面介绍几种常见的负载均衡方法. 1.用户手动选择方法 这是一种较为古老的方式.通过在主站首页入口提供不同线路.不同服务器连接的方式,来实现负载均衡.这种方式在一些提供下载 ...