HDU3045 Picnic Cows
题面
题解
将权值排序,则分组一定是连续的
设$f[i]$表示前$i$头牛的最小代价,则($a[i]$为$i$的权值):
$$ f[i] = f[j - 1] + sum[i] - sum[j - 1] - (i - j + 1) * a[j] $$
套上斜率优化的板子即可。
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x))
const int maxn(5e5 + 10);
int n, t, q[maxn];
long long sum[maxn], a[maxn], f[maxn];
inline long long x(int i) { return a[i]; }
inline long long y(int i) { return f[i - 1] - sum[i - 1] + (i - 1) * a[i]; }
inline bool check(int i, int j, int k)
{
return (y(i) - y(j)) * (x(j) - x(k)) <= (y(j) - y(k)) * (x(i) - x(j));
}
int main()
{
while(~scanf("%d%d", &n, &t))
{
for(RG int i = 1; i <= n; i++) scanf("%lld", a + i);
std::sort(a + 1, a + n + 1);
for(RG int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i];
int S = t << 1, head = 1, tail = 0;
for(RG int i = t; i < S; i++) f[i] = sum[i] - i * a[1];
for(RG int i = S; i <= n; i++)
{
while(head < tail && check(i - t + 1, q[tail], q[tail - 1])) --tail;
q[++tail] = i - t + 1;
while(head < tail && (y(q[head + 1]) - y(q[head]))
<= (x(q[head + 1]) - x(q[head])) * i) ++head;
f[i] = f[q[head] - 1] + sum[i] - sum[q[head] - 1] -
(i - q[head] + 1) * a[q[head]];
}
printf("%lld\n", f[n]);
}
return 0;
}
HDU3045 Picnic Cows的更多相关文章
- HDU3045 Picnic Cows —— 斜率优化DP
题目链接:https://vjudge.net/problem/HDU-3045 Picnic Cows Time Limit: 8000/4000 MS (Java/Others) Memor ...
- HDU3045 Picnic Cows (斜率DP优化)(数形结合)
转自PomeCat: "DP的斜率优化--对不必要的状态量进行抛弃,对不优的状态量进行搁置,使得在常数时间内找到最优解成为可能.斜率优化依靠的是数形结合的思想,通过将每个阶段和状态的答案反映 ...
- HDU 3045 Picnic Cows(斜率优化DP)
Picnic Cows Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 3045 Picnic Cows(斜率优化DP)
题目链接:hdu 3045 Picnic Cows 题意: 有n个奶牛分别有对应的兴趣值,现在对奶牛分组,每组成员不少于t, 在每组中所有的成员兴趣值要减少到一致,问总共最少需要减少的兴趣值是多少. ...
- HDU 3045 - Picnic Cows - [斜率DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 It’s summer vocation now. After tedious milking, ...
- HDU 3045 picnic cows(斜率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 题目大意:有n个数,可以把n个数分成若干组,每组不得小于m个数,每组的价值=除了该组最小值以外每 ...
- HDU 3045 Picnic Cows
$dp$,斜率优化. 设$dp[i]$表示$1$至$i$位置的最小费用,则$dp[i]=min(dp[j]+s[i]-s[j]-(i-j)*x[j+1])$,$dp[n]$为答案. 然后斜率优化就可以 ...
- HDU 3045 DP 斜率优化 Picnic Cows
题意:将n个数分成若干组,每组数字的个数不少于t个,要把每组的数字减小到这组最小值,求所有数字减少的最小值. 先将这n个数从小到大排个序,可以想到一组里面的数一定是排序后相邻的. 设d(i)表示前i个 ...
- POJ2018 Best Cow Fences —— 斜率优化DP
题目链接:https://vjudge.net/problem/POJ-2018 Best Cow Fences Time Limit: 1000MS Memory Limit: 30000K T ...
随机推荐
- [SQL Server]数据库的恢复
数据库恢复是和数据库备份相对应的操作,它是将数据库备份重新加载到系统中的过程.数据库恢复可以创建备份完成时数据库中存在的相关文件,但是备份以后的所有数据库修改都将丢失. SQL Server进行数据库 ...
- ps命令之排序
Linux中ps命令会自动选择一列进行排序,但有时这不是我们想要的. 方法一: ps+sort sort 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同:-b :忽略最前面 ...
- linux下指定源下载
我们默认使用yun 安装的时候 使用的 是外国的网站进行下载的 那么下载肯定是慢的 我们可以更改为国内的站点进行下载的 比如临时更改为国内的站点进行下载 pip install -i +你的源 p ...
- consul日常操作命令
#开发模式运行agent consul agent -dev #查看consul 集群成员 consul members [-detailed] members命令的输出基于gossip协议,并最终一 ...
- LinkedHashSet 元素唯一,存储取出有序
package cn.itcast_04; import java.util.LinkedHashSet; /* * LinkedHashSet:底层数据结构由哈希表和链表组成. * 哈希表保证元 ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 F题 Clever King(最小割)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- Python 3 实现定义跨模块的全局变量和使用
尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖. Python 中 global 关键字可以定义一个变量为全局变量,但 ...
- P2418 yyy loves OI IV
题目背景 某校2015届有两位OI神牛,yyy和c01. 题目描述 全校除他们以外的N名学生,每人都会膜拜他们中的某一个人.现在老师要给他们分宿舍了.但是,问题来了: 同一间宿舍里的人要么膜拜同一位大 ...
- DOS命令行简单用法
DOS命令行简单用法 基本用法 1.cd(回车)从当前目录切回到根目录. 2.dir(回车)列出当前目录下的所有文件. 3.md kkk(回车)在当前目录下创建一个名称为kkk的文件夹. 4.rd k ...
- ethereumjs/ethereumjs-common-3-test
查看test能够让你更好滴了解其API文档的使用 ethereumjs-common/tests/chains.js const tape = require('tape') const Common ...