试题 算法训练 逗志芃的危机 (Java实现 通俗易懂)
问题描述:
逗志芃又一次面临了危机。逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了。现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从最前面或者最后面取走一个数,全部取完则游戏结束,之后每个人取走的数的和就是每个人的得分。由于逗志芃妹子很厉害,但他又不想输,所以只能找到你了,你要告诉他最多可以得到多少分。(注意,妹子智商是maxlongint所以是不会犯错的,每次的策略必然最优,而且逗志芃是先手)
输入格式
第一行一个数n,表示有n个数。
第二行就是进行游戏的n个数。
输出格式
一个数,最高得分
样例输入
2
10 20
样例输出
20
数据规模和约定
例:0<n,m<=1000,每个数不超过10000 。
思路:
本题跟0-1背包很相似,0-1背包的每一次时取或者不取,而本题的每一次取最前面或者最后面的数字。逗志芃取的时候,选择能取得更多的情况,妹妹取的时候,会让他选择取得更少的情况。用step控制取的轮次,step为单数时,轮到逗志芃,为双数时,妹妹取。
完整代码:
import java.util.Scanner;
public class Main {static int[] nums;static int[][] res = new int[1000][1000]; // res[i][j]表示i到j区间能取到的最大值public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine(); // 当第一行为数字,第二行为字符串时,要用sc.nextLine来消除回车带来的影响String str = sc.nextLine(); // 获取第二行的字符String[] temp = str.trim().split(" ");nums = new int[n];for (int i=0;i<n;i++){nums[i] = Integer.parseInt(temp[i]);}System.out.println(solve(0,n-1,1));}/*** @param start 前面的指针* @param end 后面的指针* @param step 表示进行到第几步了* @return*/private static int solve(int start, int end, int step){if (res[start][end]!=0) // 当res[i][j]存在时,直接返回 剪枝,避免超时return res[start][end];if (start==end) // 当只有一个数时,一定是妹妹取,返回0return 0;if (step%2==1){ // 步数为奇数时,逗志凡取,返回后面能取得较多的情况return res[start][end] = Math.max((nums[start]+solve(start+1,end,step+1)),nums[end]+solve(start,end-1,step+1));}else { // 步数为偶数时,妹妹取,返回后面能取得较少的情况return res[start][end] = Math.min(solve(start+1,end,step+1),solve(start,end-1,step+1));}}
}
试题 算法训练 逗志芃的危机 (Java实现 通俗易懂)相关推荐
- 试题 算法训练 逗志芃的危机 java实现
问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数**(n是偶数)**写成一行,然后两个人轮流取数,每次 ...
- 蓝桥杯 试题 算法训练 逗志芃的危机
逗志芃的危机 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数 ...
- 试题 算法训练 逗志芃的暴走 java实现
问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点.由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了 ...
- 试题 算法训练 逗志芃的危机
在此记录一下学习大佬思路的题解吧 #include<iostream> using namespace std;const int N = 1010; int dp[N][N], a[N] ...
- 算法训练,逗志芃的暴走(Java代码)-蓝桥杯/leetcode
蓝桥杯试题 算法训练 逗志芃的暴走(Java代码) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对 ...
- 算法训练 逗志芃的危机
算法训练 逗志芃的危机 1.题目 2.输入格式 3.输出格式 4.代码部分 5.测试数据 1.题目 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要 ...
- 蓝桥杯 算法训练 逗志芃的危机
蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...
- 试题 算法训练 逗志芃的暴走
试题 算法训练 逗志芃的暴走 复习累了随便刷了道题,但没想到的是这道dfs有点坑... 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼. ...
- 蓝桥杯算法训练-逗志芃的危机
每日更新蓝桥杯题解, 有兴趣关注一波呀 文章目录 题目描述 题解 java代码 C++代码 题目描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一 ...
最新文章
- ​不唯SCI,博士生要怎么培养?当我们反对SCI至上时,我们到底在反对什么?...
- linux mysql 5.7 配置_linux下mysql5.7的安装配置
- pixhawk commander--navigator--modules之间的联系
- NioEventLoop 的实例化过程
- Web前端开发笔记——第三章 CSS语言 第五节 盒子模型
- FiddlerScript-常用总结
- [vscode] 使用正则表达式进行搜索
- NLP—6.数据不平衡处理
- 【linux】Redhat 7 更新 yum源
- jar类型文件图标不显示_显示的JAR文件
- Global Mapper24.0汉化中文版下载安装教程
- 传智播客微金所项目实战移动web开发
- 百度云盘archlinux manjaro直接安装
- 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...
- python【一行代码】生成个性二维码
- 微信公众号 - 网页服务 - 分享接口
- 订单退款与退款失败任务重试
- 新手如何运营推广微信公众号
- 温伯格:量子力学的困境
- 哨兵-1 Sentinel-1数据下载(ASF)
热门文章
- c51中断优先级c语言,51单片机中断优先级设置,中断优先级如何设置
- 国密算法的EKEY的使用
- 探索移动端音视频与GSYVideoPlayer之旅 | Agora Talk
- 如何写好科研论文笔记 李玉军 清华大学 学堂在线课程
- 总结哪些因素影响谷歌排名
- 调用bing图片html代码,网站背景调用必应Bing每日图片教程附接口
- 使用高德地图2D/3D SDK添加海量描点Marker以及视图中显示所有描点、我的定位添加呼吸动画
- Adobe Dreamweaver 的基础知识
- 《神经网络与深度学习》nndl读书笔记
- 今日头条李航:深度学习NLP的现有优势与未来挑战