[Usaco2009 Nov]硬币游戏

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 431  Solved: 240
[Submit][Status][Discuss]

Description

农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏。 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起的第I枚硬币的币值为C_i (1 <= C_i <= 100,000)。 开始玩游戏时,第一个玩家可以从堆顶拿走一枚或两枚硬币。如果第一个玩家只拿走堆顶的一枚硬币,那么第二个玩家可以拿走随后的一枚或两枚硬币。如果第一个玩家拿走两枚硬币,则第二个玩家可以拿走1,2,3,或4枚硬币。在每一轮中,当前的玩家至少拿走一枚硬币,至多拿走对手上一次所拿硬币数量的两倍。当没有硬币可拿时,游戏结束。 两个玩家都希望拿到最多钱数的硬币。请问,当游戏结束时,第一个玩家最多能拿多少钱呢?

Input

第1行:1个整数N

第2..N+1行:第i+1行包含1个整数C_i

Output

第1行:1个整数表示第1个玩家能拿走的最大钱数。

Sample Input

5
1
3
1
7
2

Sample Output

9

HINT

样例说明:第1个玩家先取走第1枚,第2个玩家取第2枚;第1个取走第3,4两枚,第2个玩家取走最后1枚。

Source

 
题解:
  dp[i,j]:剩下i枚硬币,前一个人拿了j枚,自己最大的收益
  ans=dp[n,1]
  转移
    dp[i,j]=max{sum[i]−dp[i−k,k]}     (1≤k≤min(2j,i)) 
    dp[i,j]=sum[i]−max{dp[i−k,k]}     (1≤k≤min(2j,i)) 
    dp[i,j−1]=sum[i]−max{dp[i−k,k]}     (1≤k≤min(2j−2,i)) 
 #include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define N 2007
#define inf 1000000007
#define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n;
int c[N],sum[N],dp[N][N]; int main()
{
n=read();
for (int i=n;i;i--) c[i]=read();
for (int i=;i<=n;i++) sum[i]=sum[i-]+c[i];
for (int i=;i<=n;i++)
{
int mn=inf;
for (int j=;j<=n;j++)
{
int t=min(j*,i);
mn=min(mn,dp[i-t][t]);
t=min(j*-,i);
mn=min(mn,dp[i-t][t]);
dp[i][j]=sum[i]-mn;
}
}
printf("%d",dp[n][]);
}

最新文章

  1. Java防止SQL注入(转)
  2. 【leetcode❤python】 278. First Bad Version
  3. C#调用sap接口及返回数据到sap
  4. Windows配置端口转发
  5. SQL 表锁(转)
  6. POI 操作(新接口)
  7. window.location.href问题,点击,跳转到首页
  8. Mac OS X和iOS上基本数据类型的字节数
  9. Angular规范
  10. linux下php开发环境搭建(nginx+php+mysql)
  11. 如何使用Vue2做服务端渲染
  12. redis 字符串
  13. 图论算法-Tarjan模板 【缩点;割顶;双连通分量】
  14. python 程序中调用go
  15. Angular动态创建组件之Portals
  16. 试题 E: 迷宫
  17. 2018软件工程W班第一次助教小结
  18. 黑an网络---an网入门
  19. Python学习笔记(2)-字典
  20. CentOS7 下 Hadoop 分布式部署

热门文章

  1. shell批量转换iOS和Android图标
  2. Unity之脚本编译顺序
  3. softmax_loss.cu 和 softmax_loss.cpp源码
  4. 二、pandas入门
  5. WINDOWS-API:取得系统语言种类-GetOEMCP
  6. 菜鸟教你如何通俗理解——&gt;集群、负载均衡、分布式
  7. iOS 常用尺寸
  8. js之数组知识
  9. hihoCoder-1097-Prim
  10. 【DB_MySQL】查询语句中各子句的执行顺序