题目大意:

给定\(n\)个正整数,\(a, b\)两个人轮流取,\(a\)先手

每次可以取任意多的数,直到取完,每次的得分为取的数中的最小值

\(a, b\)都会使自己的得分减去对手的得分更大,询问最后\(a\)的得分减去\(b\)的得分的大小


先考虑排序

排完序之后,先手一定取连续的一段

如果不取完,那么后手有更多的选择空间(可以选择大数或者带着大数选前面的区间)

设\(f[i]\)表示\(1 \sim i\)中先手取比后手取多的最大值

那么有\(f[i] = max(-f[j] + a[j + 1])\)

然后随意优化下就是\(O(n)\)啦


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;#define ll long long
#define ri register int
#define rep(io, st, ed)  for(ri io = st; io <= ed; io ++)
#define drep(io, ed, st) for(ri io = ed; io >= st; io --)#define gc getchar
inline int read() {int p = 0, w = 1; char c = gc();while(c > '9' || c < '0') { if(c == '-') w = -1; c = gc(); }while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();return p * w;
}const int sid = 1e6 + 5;int n;
ll f[sid];
int a[sid];int main() {n = read();rep(i, 1, n) a[i] = read();sort(a + 1, a + n + 1);ll mx = a[1];rep(i, 1, n) {f[i] = mx;mx = max(mx, -f[i] + a[i + 1]);}printf("%lld\n", f[n]);return 0;
}

转载于:https://www.cnblogs.com/reverymoon/p/10105362.html

luoguP3507 [POI2010]GRA 性质 + 动态规划相关推荐

  1. 动态规划备忘录方法Java_动态规划和备忘录法的区别

    动态规划算法的基本要素:1最优子结构性质当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质.2重叠子问题性质动态规划算法对每个问题只解一次,将其解保存在一个表格中,当再次需要解此问题时 ...

  2. 备忘录方法与动态规划比较

     动态规划算法的基本要素:  1  最优子结构性质 当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质. 2  重叠子问题性质    动态规划算法对每个问题只解一次,将其解保存在一个表 ...

  3. 动态规划备忘录方法递归方法

    动态规划的基本思想是,将原问题拆分为若干子问题,自底向上的求解.其总是充分利用重叠子问题,即通过每个子问题只解一次,把解保存在一个表中,巧妙的避免了子问题的重复求解. 递归方法,采用的是自顶向下的思想 ...

  4. 多阶段决策求最优解----动态规划(Dynamic Programming)

    文章目录 引例1:最短路径求解 引例2:数塔问题 搜索的代码实现 动态规划的思路 递推代码 空间换时间 递归代码 记忆化搜索 用于降低递归的复杂度 动态规划理论小结 动态规划的性质 动态规划的优势 解 ...

  5. 动态规划算法思想解决找零钱问题

    前言 关于找零钱问题,网上已经有很多相关的资料以及优秀的文章博客等.这里写这篇博客的初衷很简单,就是为了方便自己,回过头来捡起这个知识能快一点,接受起来更易理解点:他人的文章写的再好,毕竟是别人的,学 ...

  6. 贪心算法、分治算法和动态规划的区别

    贪心算法.分治算法和动态规划的区别 (1)分治法(divide and conquer method) 将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就 ...

  7. 机器学习+算法考试有感 2019 山东大学

    机器学习+算法考试有感 2019 山东大学 机器学习 算法 机器学习 开卷考,考试只占40分 只记得如下: 名词解释(最大似然+强化学习+奥卡姆剃刀) 简答(贝叶斯估计) 大题(决策树+svm) 本学 ...

  8. 树的最大连通分支问题

    问题描述 给定一棵树 T,树中每个顶点 u 都有一个权 w(u),权可以是负数.现在要找到树 T 的一个连通子图使该子图的权之和最大. 对于给定的树 T,编程计算树 T 的最大连通分支. 数据输入 第 ...

  9. 2022春招面试题总结-C++方向

    文章目录 多益笔试 中望龙腾面试 字节一面 乐易公司面试记录 小米 vivo笔试 完美世界 一面 二面 智加 一面 米哈游 一面 二面 腾讯 一面 记录一下春招的面试笔试题,部分有答案,感触很深,面的 ...

  10. 计算机算法设计与分析(国科大考试)

    Exam 简答题 1,陈述算法在最坏时间下的时间复杂度和平均时间复杂度:这两种评估算法复杂性的方法各自有什么意义? 答:最坏情况下的时间复杂度称之为最坏时间复杂度,一般不特别说明,讨论的时间复杂度均是 ...

最新文章

  1. android layout组件,Android UI学习 - Linear Layout, RelativeLayout
  2. Git使用常见问题解决方法汇总
  3. 正则表达式 学习笔记5.3
  4. mysql的for循环_MySQL中的For循环示例
  5. fread读取整个文件_qt如何实现大文件的加载和显示
  6. ThinkPad E550 Catalina用OC换Clover引导的过程(支持Mac Update)
  7. 超像素分割算法SLIC的matlab实现
  8. 【第一阶段 day25 面向对象】 多态
  9. 普通化学三个单元总结
  10. 计算机网络实验——使用网络协议分析仪Wireshark
  11. picgo设置gitee图床
  12. oracle 无法归档日志,报all online log need archiving
  13. 初中英语和计算机融合的教学案例,初中英语与信息技术整合教学案例
  14. 使用vue解决vs编辑器格式化分号逗号问题
  15. 智能化测试技术探索与实践——AAAS/IEEE Fellow、北京大学讲席教授谢涛阿里行
  16. 类中数组成员变量怎么初始化,数组名与指针的区别
  17. python爬虫学习笔记分析Ajax爬取果壳网文章
  18. idea 不识别java文件,类文件变成灰色,而且有橙色角标
  19. ALtium Designer: .prjscr .pas转换成封装库(从ADI公司下载封装)
  20. 英语面试最实用的五大技巧

热门文章

  1. 升级nodejs的方法(3)
  2. 用进化的观点学习网络协议
  3. Win10 不火不行!Edge 无缝兼容 Chrome扩展
  4. 单调队列:temperature
  5. WinForm 窗体中实现单例模式
  6. iPhone文件系统:创建、重命名以及删除文件
  7. CSS 中的字体兼容写法:用CSS为英文和中文字体分别设置不同的字体
  8. Mybatis-Dao层开发之Mapper接口
  9. Android Studio API 文档_下载与使用
  10. PHP扩展迁移为PHP7扩展兼容性问题记录