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

Silver

好神的$dp$。 真的好难想。。

设$f[i][j]$表示还剩$i$个硬币上一个人取了$j$个的最大收益

设$sum[i]$表示硬币价值前缀和

那么我们有状态转移方程$f[i][j]=max(f[i][j],sum[i]-f[i-k][k])(1<=k<=min(i,2*j))$

这样我们得到一个$O(n^3)$的算法,到这应该都还能理解

然而并不能跑过去,我们可以发(参)现(考)一个很吊的优(题)化(解)

我们考虑到$f[i][j]$和$f[i][j-1]$绝大多数状态相同,我们只用再多考虑多出来的两组即可

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #define M 2010
 4 using namespace std;
 5 int n;
 6 int a[M],f[M][M];
 7 int main()
 8 {
 9     scanf("%d",&n);
10     for(int i=n;i>=1;i--) scanf("%d",&a[i]);
11     for(int i=1;i<=n;i++) a[i]+=a[i-1];
12     for(int i=1;i<=n;i++)
13         for(int j=1;j<=n;j++)
14         {
15             f[i][j]=f[i][j-1];
16             int k=j*2;
17             if(i>=k) f[i][j]=max(f[i][j],a[i]-f[i-k][k]);
18             k=j*2-1;
19             if(i>=k) f[i][j]=max(f[i][j],a[i]-f[i-k][k]);
20         }
21     printf("%d",f[n][1]);
22     return 0;
23 }

转载于:https://www.cnblogs.com/Slrslr/p/9576989.html

[BZOJ2017][Usaco2009 Nov]硬币游戏相关推荐

  1. [bzoj 2017] [Usaco2009 Nov]硬币游戏

    一个多月没更博客了..(期间明白了自己有多傻逼. 这种问题大概就倒着做... f[i][j]:表示考虑剩下的硬币i..n,且之前的人取了j个时,先手最多拿到的钱数.aft[i]:表示硬币i..n的总钱 ...

  2. 2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进

    作业目的 Python 程序阅读理解 学习Python 编码风格指南中译版(Google SOC), 改进Python程序 如何设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币) ...

  3. 51nod 1381 硬币游戏 概率

    1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有一个简单但是很有趣的游戏.在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平 ...

  4. [Sdoi2017]硬币游戏 [高斯消元 KMP]

    [Sdoi2017]硬币游戏 题意:硬币序列,H T等概率出现,\(n \le 300\)个人猜了一个长为$ m \le 300$的字符串,出现即获胜游戏结束.求每个人获胜概率 考场用了[1444: ...

  5. 软工作业2:硬币游戏——代码的分析与改进

    目的: Python 程序阅读理解 学习Python 编码风格指南中译版(Google SOC), 改进Python程序 如何设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币), ...

  6. 【BZOJ4820】[SDOI2017]硬币游戏(高斯消元)

    [BZOJ4820][SDOI2017]硬币游戏(高斯消元) 题面 BZOJ 洛谷 题解 第一眼的感觉就是构\(AC\)自动机之后直接高斯消元算概率,这样子似乎就是\(BZOJ1444\)了.然而点数 ...

  7. JZOJ 1322. 硬币游戏

    Description FJ的奶牛喜欢玩硬币游戏,所以FJ发明了一个新的硬币游戏.一开始有N(5<=N<=2,000)个硬币堆成一叠,从上往下数第i个硬币有一个整数值C_i(1<=C ...

  8. 浅谈 翻硬币游戏【Nim博弈】

    ACM博客_kuangbin 博弈-翻硬币游戏 hihoCoder 1172 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和B ...

  9. BZOJ 1411Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 897  Solved: 394 [Submit][Stat ...

最新文章

  1. python读取txt文件代码-从文本文件中读取Python代码
  2. AFNetworking 3.0 发送soap到webservice
  3. 04.并发和互斥.md
  4. CodeForces 696B Puzzles
  5. 前端学习(476):web前端行业介绍
  6. ImportError: libjpeg.so.62: cannot open shared object file: No such file or directory
  7. Cocos2d-x之LUA脚本引擎深入分析
  8. Shell脚本学习-阶段七-信息过滤磁盘分区
  9. 我的世界java232位_我的世界32位红石电脑RSC-3230(无命令方块)(2)
  10. doT js模板入门
  11. 理解vue中的父组件,子组件
  12. 【渝粤教育】电大中专营销策划原理与实务 (2)_1作业 题库
  13. 电脑重装系统后谷歌浏览器连不上网的解决方案
  14. python之Srcapy框架浅谈
  15. 图片轮播banner实现
  16. 哈希表、哈希桶的实现
  17. 弘辽科技:拼多多高客单价怎么改低价格提升?
  18. android WebView多标签,加速解决卡顿,视频播放笔记
  19. springboot+vue前后端分离项目(后台管理系统)
  20. 你必须要看的IT培训机构选择意见

热门文章

  1. SAP Netweaver和阿里云的战略合作关系
  2. SAP Cloud for Customer Sales Order Pricing Date的配置
  3. Netweaver和CloudFoundry的服务器日志
  4. jsonobject修改key的值_修改JSONArray里所有key的值
  5. 从零开始学计算机组装与维修技术,从新手到高手:电脑组装、维护与故障排除...
  6. mysql + IDEA + JDBC
  7. Python中float(‘inf‘)代表什么意思?
  8. ct报告就一定准确吗_晋州市人民医院检验报告出具时间提速啦!
  9. AXI_04 AXI_LITE_MASTER_IP设计与验证
  10. cocos2dx ios入口类_2.cocos2d-x 第一个项目