文章目录

  • 1. 题目
  • 2. 解题

1. 题目

https://tianchi.aliyun.com/oj/245679029019779851/254275128279634585

有一个长度为n的数列arr, 甲乙两个人每次可以从头或者从末尾取一个数,双方都想让自己取数之和尽量多,
甲先取数,问甲乙在采取最优策略的基础下,甲最多得多少分?

n<=800示例
给定arr=[8,6,9,4,4,3],返回21
给定arr=[1,3,5,8,7,9,1],返回14

2. 解题

相关题目:LeetCode 博弈DP系列

  • dp[i][j] 表示 剩下的数字的区间为 [i,j] 时,先手的最大分差,使用区间DP求取
  • 假设 两人的最佳得分为 a(先手), b, 有 a+b=sum,a−b=dp[0][n−1]a+b = sum, a-b = dp[0][n-1]a+b=sum,a−b=dp[0][n−1],解方程即得到 a
class Solution {public:/*** @param arr: the number array* @return: output the maximal score Alice can get*/int getAns(vector<int> &arr) {// Write your code hereint n = arr.size();int sum = accumulate(arr.begin(), arr.end(), 0);//总的分数vector<vector<int>> dp(n, vector<int>(n, 0));for(int i = 0; i < n; i++) dp[i][i] = arr[i];//只剩一个数字时的得分for(int len = 1; len <= n; len++){for(int i = 0; i+len < n; i++){int j = i+len;dp[i][j] = max(-dp[i+1][j]+arr[i], -dp[i][j-1]+arr[j]);//         上一个人的分差取负就是我的分差,加上我的得分,两种选择取大的}}return (sum+dp[0][n-1])/2;}
};

50ms C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

天池 在线编程 双向取数(博弈DP)相关推荐

  1. Gym-101502J(取数博弈+dp)

    题目:http://codeforces.com/gym/101502/problem/J J. Boxes Game time limit per test 3.0 s memory limit p ...

  2. 天池 在线编程 拿走瓶子(区间DP)

    文章目录 1. 题目 2. 解题 1. 题目 描述 有n个瓶子排成一列,用arr表示. 你每次可以选择能够形成回文连续子串的瓶子拿走,剩下的瓶子拼接在一起. 返回你能拿走所有的瓶子的最小次数. n&l ...

  3. 【组队学习】【34期】阿里云天池在线编程训练营

    阿里云天池在线编程训练营 航路开辟者:陈信达.杨世超.赵子一.马燕鹏 领航员:武帅.初晓宇.叶前坤.邱广坤.朱松青 航海士:宁彦吉.肖桐.汪超.陈信达.杨世超.赵子一.武帅.初晓宇.叶前坤.邱广坤.朱 ...

  4. Vijos1451圆环取数[环形DP|区间DP]

    背景 小K攒足了路费来到了教主所在的宫殿门前,但是当小K要进去的时候,却发现了要与教主守护者进行一个特殊的游戏,只有取到了最大值才能进去Orz教主-- 描述 守护者拿出被划分为n个格子的一个圆环,每个 ...

  5. 【洛谷P1430】序列取数【dp】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P1430 给定一个长为n的整数序列,由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数 ...

  6. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现

    看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...

  7. 阿里笔试题(2017在线编程题)-- 数串分组 --Java实现

    看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...

  8. 天池 在线编程 高效作业处理服务(01背包DP)

    文章目录 1. 题目 2. 解题 1. 题目 https://tianchi.aliyun.com/oj/231188302809557697/235445278655844967 Twitter正在 ...

  9. 天池 在线编程 条件串(DP)

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/164427478262600292/204998627646706401 2. 解题 ...

最新文章

  1. 关于介绍编程前景的html文档,HTML编程基础稿件(32页)-原创力文档
  2. linux系统下文件命令详解
  3. 大数据量Excel Import导致OOM问题
  4. 机会难得,当当网抄底(五折+专属大额优惠码)优惠,双十一我囤了这些书!...
  5. Android中怎获取json,Android应用中如何解析获取的json数据
  6. VS Code 直接跳到下一行编辑快捷键
  7. html如何去掉有无标题点,HTML中,如何去掉某个元素下的一些特殊标签?
  8. [转]详细的GStreamer开发教程
  9. androidpn的学习研究(六)Androidpn-server的Mina编码和解码解析过程
  10. POJ - 3190
  11. Crossing Road Simulation
  12. 常见3DMAX插件导出模型丢失贴图问题
  13. 计算机电源分金牌,机·科普贴:电脑电源金、银、铜牌到底是什么意思?
  14. 《黑客帝国》说的是什么?
  15. 红米手机android在哪里,红米手机usb调试在哪【图文】
  16. (转)pip安装报错:There was a problem confirming the ssl certificate
  17. error An unexpected error occurred “httpsregistry.npmjs.orgd3-geo-proje
  18. python二元一次方程组用鸡兔同笼的思路来写编程_python二元一次方程组用鸡兔同笼的思路来写编程_《应用二元一次方程组——鸡兔同笼》......
  19. 华为南研所机考练习2-计算麻将的番数
  20. oracle空值排到最前面或最后面

热门文章

  1. MySQL 之 explain
  2. 执行git命令时出现fatal: ‘origin‘ does not appear to be a git repository错误
  3. C#串口SerialPort常用属性方法
  4. #Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别
  5. linux :vim 实现命令行下输出进度条
  6. 数据结构探险——队列篇
  7. 最全android Demo
  8. 「网络流24题」 题目列表
  9. __ATTRIBUTE__ 你知多少?
  10. Android中Activity启动模式