luoguP3507 [POI2010]GRA 性质 + 动态规划
题目大意:
给定\(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 性质 + 动态规划相关推荐
- 动态规划备忘录方法Java_动态规划和备忘录法的区别
动态规划算法的基本要素:1最优子结构性质当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质.2重叠子问题性质动态规划算法对每个问题只解一次,将其解保存在一个表格中,当再次需要解此问题时 ...
- 备忘录方法与动态规划比较
动态规划算法的基本要素: 1 最优子结构性质 当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质. 2 重叠子问题性质 动态规划算法对每个问题只解一次,将其解保存在一个表 ...
- 动态规划备忘录方法递归方法
动态规划的基本思想是,将原问题拆分为若干子问题,自底向上的求解.其总是充分利用重叠子问题,即通过每个子问题只解一次,把解保存在一个表中,巧妙的避免了子问题的重复求解. 递归方法,采用的是自顶向下的思想 ...
- 多阶段决策求最优解----动态规划(Dynamic Programming)
文章目录 引例1:最短路径求解 引例2:数塔问题 搜索的代码实现 动态规划的思路 递推代码 空间换时间 递归代码 记忆化搜索 用于降低递归的复杂度 动态规划理论小结 动态规划的性质 动态规划的优势 解 ...
- 动态规划算法思想解决找零钱问题
前言 关于找零钱问题,网上已经有很多相关的资料以及优秀的文章博客等.这里写这篇博客的初衷很简单,就是为了方便自己,回过头来捡起这个知识能快一点,接受起来更易理解点:他人的文章写的再好,毕竟是别人的,学 ...
- 贪心算法、分治算法和动态规划的区别
贪心算法.分治算法和动态规划的区别 (1)分治法(divide and conquer method) 将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就 ...
- 机器学习+算法考试有感 2019 山东大学
机器学习+算法考试有感 2019 山东大学 机器学习 算法 机器学习 开卷考,考试只占40分 只记得如下: 名词解释(最大似然+强化学习+奥卡姆剃刀) 简答(贝叶斯估计) 大题(决策树+svm) 本学 ...
- 树的最大连通分支问题
问题描述 给定一棵树 T,树中每个顶点 u 都有一个权 w(u),权可以是负数.现在要找到树 T 的一个连通子图使该子图的权之和最大. 对于给定的树 T,编程计算树 T 的最大连通分支. 数据输入 第 ...
- 2022春招面试题总结-C++方向
文章目录 多益笔试 中望龙腾面试 字节一面 乐易公司面试记录 小米 vivo笔试 完美世界 一面 二面 智加 一面 米哈游 一面 二面 腾讯 一面 记录一下春招的面试笔试题,部分有答案,感触很深,面的 ...
- 计算机算法设计与分析(国科大考试)
Exam 简答题 1,陈述算法在最坏时间下的时间复杂度和平均时间复杂度:这两种评估算法复杂性的方法各自有什么意义? 答:最坏情况下的时间复杂度称之为最坏时间复杂度,一般不特别说明,讨论的时间复杂度均是 ...
最新文章
- android layout组件,Android UI学习 - Linear Layout, RelativeLayout
- Git使用常见问题解决方法汇总
- 正则表达式 学习笔记5.3
- mysql的for循环_MySQL中的For循环示例
- fread读取整个文件_qt如何实现大文件的加载和显示
- ThinkPad E550 Catalina用OC换Clover引导的过程(支持Mac Update)
- 超像素分割算法SLIC的matlab实现
- 【第一阶段 day25 面向对象】 多态
- 普通化学三个单元总结
- 计算机网络实验——使用网络协议分析仪Wireshark
- picgo设置gitee图床
- oracle 无法归档日志,报all online log need archiving
- 初中英语和计算机融合的教学案例,初中英语与信息技术整合教学案例
- 使用vue解决vs编辑器格式化分号逗号问题
- 智能化测试技术探索与实践——AAAS/IEEE Fellow、北京大学讲席教授谢涛阿里行
- 类中数组成员变量怎么初始化,数组名与指针的区别
- python爬虫学习笔记分析Ajax爬取果壳网文章
- idea 不识别java文件,类文件变成灰色,而且有橙色角标
- ALtium Designer: .prjscr .pas转换成封装库(从ADI公司下载封装)
- 英语面试最实用的五大技巧