Lintcode 硬币排成线
来源:互联网 发布:html5个人网站源码 编辑:程序博客网 时间:2024/05/17 05:55
http://www.jianshu.com/p/42656455eefc
这篇文章分析的很好!
说明一点: 我们每次取硬币,最多只能下一次。 所以只考虑本次 和下一次。
当i = len-4以及以后的情况中,显然可以选择拿一个或者拿两个两种情况,我们自然是选择拿最多的那个作为dp的值,那么我们就分分析这两种情况:
第一种,只拿一个,那么对手可能拿两个或者一个,对手肯定是尽可能多拿,所以我们要选择尽可能小的那个,所以dp[i] = values[i] + min(dp[i+2],dp[i+3])
第二种,拿两个 dp[i] = values[i]+ values[i+1]+min(dp[i+3],dp[i+4])
然后我们取这两种情况下的最大值。
class Solution { public: /** * @param values: a vector of integers * @return: a boolean which equals to true if the first player will win */ bool firstWillWin(vector<int> &values) { // write your code here int n = values.size(); if (n < 3) { return true; } int buf[n+1]; buf[n] = 0; buf[n-1] = values[n-1]; buf[n-2] = values[n-2] + values[n-1]; buf[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] + min(buf[i+2], buf[i+3]); int b = values[i] + values[i+1] + min(buf[i+3], buf[i+4]); buf[i] = max(a, b); sum += values[i]; } return buf[0] > sum-buf[0]; } };
阅读全文
0 0
- LintCode-硬币排成线
- LintCode : 硬币排成线
- Lintcode 硬币排成线
- 硬币排成线-LintCode
- LintCode-硬币排成线 III
- LintCode-硬币排成线 II
- lintcode-硬币排成一条线
- LintCode :硬币排成线 II
- LintCode硬币排成线 巴什博奕
- [LintCode]硬币排成线 II
- LintCode 硬币排成线 II
- 硬币排成线 II-LintCode
- 硬币排成线—LintCode
- LintCode:硬币排成线(1 2)
- LintCode:M-硬币排成线 II
- LintCode笔记(1)——硬币排成线
- lintcode coins-in-a-line 硬币排成线
- lintcode coins-in-a-line-ii 硬币排成线ii
- 深度学习在 NLP 上的实践
- Hibernate学习笔记 -- day07 HQL、QBC查询用法
- Gym
- jxl 的详细用法说明
- Sed命令简介
- Lintcode 硬币排成线
- WEB应用中间层的分层架构设计总结
- 装饰器作业代码
- 错误:Errors running builder 'Android Pre Compiler' on project 'XXXX'.已解决
- 直接双击启动tomcat中的startup.bat闪退
- Android Launcher3安装应用后,控制应用图标显示位置
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)
- java.lang.IllegalStateException: Can't overwrite cause webservice访问异常 解决方案
- 个人站建站大体思路 具体步骤百度有详解