算法训练 逗志芃的危机

题目描述

逗志芃又一次面临了危机。逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了。现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从最前面或者最后面取走一个数,全部取完则游戏结束,之后每个人取走的数的和就是每个人的得分。由于逗志芃妹子很厉害,但他又不想输,所以只能找到你了,你要告诉他最多可以得到多少分。(注意,妹子智商是maxlongint所以是不会犯错的,每次的策略必然最优,而且逗志芃是先手)

输入格式

第一行一个数n,表示有n个数。第二行就是进行游戏的n个数。

输出格式

一个数,逗志凡最高得分

样例输入

2
10 20

样例输出

20

数据规模和约定

例:0<n,m<=1000,每个数不超过10000 。

题目思考

偶数个数字的数列a[N],N%2==0
逗志凡是先手,那直观的想,逗志凡每次都需要找到头尾两端的两个数中的最大的那个,即max(a[0],a[N-1])。
第二轮开始,轮到妹子选取,妹子肯定会选择最大的那个。
为了防止逗志凡短浅,只看到目前最大的,忽视了未来更大的数字,因此我们需要回溯,但是这个是我之前的想法,现在我学习他人的思想,受益良多。

第一种 动态规划

虽然题目是采用动态规划的方式求解的,但是其中还惨和有一点博弈论的思考方式

#include <iostream>
using namespace std;int main()
{//n代表有n个数字 int n;cin >> n;int nums[n];//ans[n][n]这个二维数组,超越了我对二维数组的认知//ans[n][n]代表从第i个数字到第j个数字,逗某人可以获得的最大数值//最终的结果就是ans[0][n-1]int ans[n][n];//输入n个数字for(int i=0; i<n ; i++){cin >> nums[i];}//开始进行动态规划算法//中间的ans[L][R]表示L(th)-R(th)的数字的最大值//因为R是从右到左的方向移动的,L是从0->n-1移动的,最终是ans[0][n-1]//所以在这里我的初始状态定义没搞明白,状态转移方程也没明白for(int R=0;R<n;R++){for(int L=R;L>=0;L--){if(L==R){//表示只有一个数字,只能被那个女孩子拿走//这里不太明白 ans[L][R] = 0;}else if((R-L)&1) //表示还剩下偶数个数字,那就是逗某下手{ans[L][R] = max(nums[L]+ans[L+1][R],nums[R]+ans[L][R-1]);   }else{//女孩子不会手下留情,所以留给逗志凡的会很少ans[L][R] = min(ans[L+1][R], ans[L][R-1]); } }}cout << ans[0][n-1] << endl;return 0;}

状态转移方程是这道题目的关键
对于逗先生来说,每次轮到他的时候,剩下偶数个数字。然后我们的目标是让总和最大,于是肯定需要确定

ans[L][R] = max(nums[L]+ans[L+1][R],nums[R]+ans[L][R-1]);

表示要选取最前面的还是最后面的最好,反正选最大的。
然后就是女友出手

················································
说实话,对动态规划一类的题目还缺乏认识,先写到这,之后继续
················································

蓝桥杯算法训练——逗志凡的危机——动态规划+递归相关推荐

  1. 蓝桥杯 算法训练 逗志芃的危机

    蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...

  2. 蓝桥杯算法训练-逗志芃的危机

    每日更新蓝桥杯题解, 有兴趣关注一波呀 文章目录 题目描述 题解 java代码 C++代码 题目描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一 ...

  3. 蓝桥杯 算法训练 逗志芃的危机(Java)

    问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从最 ...

  4. 算法训练 逗志芃的危机

    算法训练 逗志芃的危机 1.题目 2.输入格式 3.输出格式 4.代码部分 5.测试数据 1.题目 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要 ...

  5. 蓝桥杯 试题 算法训练 逗志芃的危机

    逗志芃的危机 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数 ...

  6. 试题 算法训练 逗志芃的危机 (Java实现 通俗易懂)

    问题描述: 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从 ...

  7. 蓝桥杯——算法基础 逗志芃的暴走PYTHON

    问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点.由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了 ...

  8. 蓝桥杯 算法训练 ALGO-128 Cowboys 递推、动态规划

    算法训练 Cowboys 时间限制:2.0s 内存限制:256.0MB 提交此题 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者 ...

  9. 试题 算法训练 逗志芃的危机 java实现

    问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数**(n是偶数)**写成一行,然后两个人轮流取数,每次 ...

最新文章

  1. android wear无法启用,android-wear – 无法创建Android虚拟设备,“没有为此目标安装系统映像”...
  2. 投影串口测试程序_【原创】串口通信测试程序
  3. nodejs之express路由与动态路由
  4. 设计模式--代理(Proxy)模式
  5. 把MSSQL2005转换成MSSQL2000
  6. kickstart 安装CentOS GPT分区的完整ks示例
  7. 160 - 4 ajj.1
  8. 女儿还有三个月就高考了,最近压力大,特别敏感,容易发火怎么办?
  9. java如何设置文本框提示_[Java教程]一个友好的文本框内显示提示语 jquery 插件
  10. koolshare离线插件下载_还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦
  11. pyhook安装说明
  12. 机器学习(四):决策树绘画(基础篇)
  13. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)
  14. FileNotFoundError: [Errno 2] No such file or directory: ‘ETHZ/eth01/images/image_00000001_2021-10-29
  15. 从MapX到MapXtreme
  16. Datax自定义Transformer数据清洗(使用本地加载local_storage解耦合)
  17. CFT每日一题之简单的SQL注入之二
  18. PHPCMS二次开发教程
  19. Raptor-选组长
  20. spring循环依赖解决办法

热门文章

  1. Origin科研绘图数据分析技巧(8),Origin软件电脑版下载安装
  2. Android NVRAM 读写
  3. 一个女生写的c语言伪代码
  4. C# 实现IAccessible学习(四)读取QQ聊天窗口记录
  5. java 车辆限行查询功能代码
  6. BUUCTF Misc [BJDCTF2020]鸡你太美 [BJDCTF2020]一叶障目 [SWPU2019]神奇的二维码 梅花香之苦寒来 [BJDCTF2020]纳尼
  7. 中国 AI 应用元年来了!
  8. 【笔记】The art of research - (讲好故事和论点)
  9. tesseract-ocr下载地址
  10. 高并发和海量数据下的 9 个 Redis 经典案例剖析!