当前位置: 首页 > news >繁体>LintCode Coins in a Line II

LintCode Coins in a Line II

原题链接在这里:http://www.lintcode.com/en/problem/coins-in-a-line-ii/

题目:

There are n coins with different value in a line. Two players take turns to take one or two coins from left side until there are no more coins left. The player who take the coins with the most value wins.

Could you please decide the first player will win or lose?

Example

Given values array A = [1,2,2], return true.

Given A = [1,2,4], return false.

题解:

是Coins in a Line的进阶题.

还是DP. 状态dp[i]是还剩i枚硬币,先手的人最后能拿到最多的值.

转移方程 dp[i] = max(min(dp[i-2],dp[i-3])+values[n-i], min(dp[i-3],dp[i-4])+values[n-i]+values[n-i+1])

初始化dp[0] = 0, dp[1] = values[i-1], dp[2] = values[i-1]+values[i-2], dp[3] = values[i-2] + values[i-3].

答案 dp[n] > sum/2

Time Complexity: O(n). Space: O(n), stack space.

AC Java:

 1 public class Solution {
 2     public boolean firstWillWin(int[] values) {
 3         if(values == null || values.length == 0){
 4             return false;
 5         }
 6         
 7         int n = values.length;
 8         int [] dp = new int[n+1];
 9         boolean [] used = new boolean [n+1];
10         int sum = 0;
11         for(int value : values){
12             sum += value;
13         }
14         
15         return sum < 2*memorySearch(values, dp, n, used);
16     }
17     
18     private int memorySearch(int [] values, int [] dp, int n, boolean [] used){
19         if(used[n]){
20             return dp[n];
21         }
22         used[n] = true;
23         
24         if(n<=0){
25             dp[n] = 0;;
26         }else if(n == 1){
27             dp[n] = values[values.length-1];
28         }else if(n == 2){
29             dp[n] = values[values.length-1] + values[values.length-2];
30         }else if(n == 3){
31             dp[n] = values[values.length-2] + values[values.length-3];
32         }else{
33             dp[n] = Math.max(
34                 Math.min(memorySearch(values, dp, n-2, used), memorySearch(values, dp, n-3, used)) + values[values.length-n]
35                 , Math.min(memorySearch(values, dp, n-3, used), memorySearch(values, dp, n-4, used)) + values[values.length-n] + values[values.length-n+1]
36                 );
37         }
38         return dp[n];
39     }
40 }

 跟上Coins in a Line III.

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/6406965.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-18700.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • 如何优化网页的加载速度
  • C++ 头文件系列(iostream)
  • 广播接收者的特点和版本差异
  • 设计模式(五) 注解方式实现AOP
  • 文章根据时间段显示的微信名和微信号
  • Struts2(接受表单参数)请求数据自动封装和数据类型转换
  • Eclipse 修改项目名称
  • 启动orcal服务和监听的命令的一种方式
  • OpenCL编程基本流程及完整示例
  • centos 7下安装mysql
  • Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair)
  • 序言与说明
  • ES6-模块导入导出
  • Web Service(二):cxf 实现
  • nand ECC 算法记录
  • 简单易懂的排序算法演示
  • 【动态规划】最大子段和问题,最大子矩阵和问题,最大m子段和问题
  • OpenCV学习:Windows+VS2010+OpenCV配置
  • java集合系列——Map之TreeMap介绍(九)
  • SQL Sever数据库的基本操作和它的建立
  • PHP查看IP时候能ping通
  • 导出数据库表为world文档说明,以及PowerDesigner导出表结构pdm设计文档
  • 201521123059 《Java程序设计》第三周学习总结
  • git如何回滚远程仓库
  • Mysql5.7双主安装与使用
  • 修饰符的探讨
  • 中学生心理辅导原则
  • 配置springMVC
  • .net中对象序列化技术
  • 项目过程总结 和某个字段的更新
  • 3.14上午
  • Centos7搭建pptp一键安装脚本
  • Linux基础实操二
  • JSONP简单例子
  • DeadObjectException
  • 个人学习进度(第四周)
  • sping加载bean都发生了些什么
  • 泛型接口
  • 安卓android eclipse运行提示no compatible targets were found
  • Unity3d 调用C++写的DLL
  • servlet 与 tomcat版本不匹配的问题
  • 通读cheerio API-网络爬虫
  • 指针和二级指针
  • HTML(超文本语言)
  • 软件测试--必应
  • openssh常用命令记录
  • 百度API从经纬度坐标到地址的转换服务
  • Android xUtils3.0使用手册(二) - 数据库操作
  • 浙江工业大学校赛 XiaoWei的战斗力
  • R语言中的字符串处理函数