395.Coins in a Line II-硬币排成线 II(中等题)
来源:互联网 发布:web服务器 并发 java 编辑:程序博客网 时间:2024/06/05 21:01
硬币排成线 II
题目
有 n 个不同价值的硬币排成一条线。两个参赛者轮流从左边依次拿走 1 或 2 个硬币,直到没有硬币为止。计算两个人分别拿到的硬币总价值,价值高的人获胜。
请判定 第一个玩家 是输还是赢?
样例
给定数组 A = [1,2,2], 返回 true.
给定数组 A = [1,2,4], 返回 false.题解
1.若第一个玩家取values[i],则对方可以取values[i+1]或values[i+1]+values[i+2]。当对方取values[i+1]后,第一个玩家只能从[i+2,n]中取,我们所取得最大值是dp[i+2]。当对方取values[i+1]+values[i+2]后,则只能从[i+3,n]中取,最大值是dp[i+3],即dp[i]=values[i]+min(dp[i+2],dp[i+3])。
2.若第一个玩家取values[i]+values[i+1],则对方可取values[i+2]或values[i+2]+values[i+3]。当对方取values[i+2]后,第一个玩家只能从[i+3,n]中取,我们取得最大值是dp[i+3]。当对方取values[i+2]+values[i+3]后,则只能从[i+4,n]中取,最大值是dp[i+4],即dp[i]=values[i]+values[i+1]+min(dp[i+3],dp[i+4])。
public class Solution { /** * @param values: an array of integers * @return: a boolean which equals to true if the first player will win */ public boolean firstWillWin(int[] values) { int n = values.length; if (n < 3) { return true; } //dp[i]表示从i到最后一个元素能取到的最大值 int dp[] = new int[n+1]; dp[n] = 0; dp[n-1] = values[n-1]; dp[n-2] = values[n-2] + values[n-1]; dp[n-3] = values[n-3] + values[n-2]; int sum = values[n-3] + values[n-2] + values[n-1]; for (int i = n-4; i >= 0; i--) { int a = values[i] + Math.min(dp[i+2], dp[i+3]); int b = values[i] + values[i+1] + Math.min(dp[i+3], dp[i+4]); dp[i] = Math.max(a, b); sum += values[i]; } return dp[0] > sum-dp[0]; }}
Last Update 2016.11.13
0 0
- 395.Coins in a Line II-硬币排成线 II(中等题)
- lintcode 中等题:Coins in Line II 硬币排成线 II
- lintcode coins-in-a-line-ii 硬币排成线ii
- 394.Coins in a Line-硬币排成线(中等题)
- lintcode Coins in Line II 硬币排成线 II
- lintcode coins-in-a-line 硬币排成线
- 硬币排成线 II
- 硬币排成线 II
- Coins in a line II lintcode
- [LintCode] Coins in a line II
- #395 Coins in a Line II
- **[Lintcode]Coins in a Line II
- LintCode-硬币排成线 II
- LintCode :硬币排成线 II
- [LintCode]硬币排成线 II
- LintCode 硬币排成线 II
- 硬币排成线 II-LintCode
- 硬币排成线I和硬币排成线II问题
- 【26.09%】【codeforces 579C】A Problem about Polyline
- CODEVS 1497取余运算
- [LeetCode]149. Max Points on a Line
- 如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器
- solution of POJ: 1328.Radar Installation
- 395.Coins in a Line II-硬币排成线 II(中等题)
- vim 使用
- [NOIP 2011] Mayan游戏:搜索,模拟
- HDOJ1002A + B Problem II
- 富人送了穷人一头牛,结果牛死了,看懂的离成功不远了!
- Java面试手写代码No.1(JDBC)
- 齐博cms老漏洞分析
- BeanUtil组件
- Storm 性能优化