[BZOJ2017] [Usaco2009 Nov]硬币游戏
2016-03-21 10:30
417 查看
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=2017题目大意
第一个人最开始拿一枚/两枚硬币,后面的人拿的硬币个数为[1..2∗上一个人拿的]第一个人最开始拿一枚/两枚硬币,后面的人拿的硬币个数为[1..2*上一个人拿的]两个人都希望拿走最多钱数,询问第一个人最多拿多少两个人都希望拿走最多钱数,询问第一个人最多拿多少
题解
sum[i]:后缀和sum[i]:后缀和dp[i,j]:剩下i枚硬币,前一个人拿了j枚,自己最大的收益dp[i,j]:剩下i枚硬币,前一个人拿了j枚,自己最大的收益
dp[i,j]=max{sum[i]−dp[i−k,k]} (1≤k≤min(2j,i))dp[i,j]=max\{sum[i]-dp[i-k,k]\}~~~~~(1\le k\le min(2j,i))
dp[i,j]=sum[i]−max{dp[i−k,k]} (1≤k≤min(2j,i))dp[i,j]=sum[i]-max\{dp[i-k,k]\}~~~~~(1\le k\le min(2j,i))
dp[i,j−1]=sum[i]−max{dp[i−k,k]} (1≤k≤min(2j−2,i))dp[i,j-1]=sum[i]-max\{dp[i-k,k]\}~~~~~(1\le k\le min(2j-2,i))
这样我们只需要跑多出来的那两组就好了这样我们只需要跑多出来的那两组就好了
这类博弈的dp,两个人都是最优拿法,所以相同状态的选择肯定是相同的这类博弈的dp,两个人都是最优拿法,所以相同状态的选择肯定是相同的
CODE
相关文章推荐
- 新装docker 从本地仓库下载
- iOS对https的支持
- Qt文档中文版
- iBatis框架使用 编程4步
- VR虚拟现实小白入门:18个VR专业术语解析!
- 写博十年,终于混到出书了
- 如何从数据库(实体提供者)读取安全用户(转自http://wiki.jikexueyuan.com/project/symfony-cookbook/entity-provider.html)
- 一步一步搭建Jenkins环境
- 新装docker 从本地仓库下载
- 解决移动端a:active伪类无效的方法
- Codeforces Round #345 (Div. 2) E. Table Compression
- 122. Best Time to Buy and Sell Stock II
- 《CLR Via C#》Developer Command Prompt for VS2013
- OpenCV颜色识别
- 数据透视表
- 在android的spinner中,实现key(id)和Value的取值
- 有了3D Touch,再也不用AssistiveTouch了
- iOS开发调试技巧
- 设置React Native自定义字体
- 源码推荐(03.21):一行代码搞定cell自动布局, 音乐播放器