2020牛客寒假算法基础集训营2 H题施魔法

链接:https://ac.nowcoder.com/acm/contest/3003/H
来源:牛客网

牛可乐有 n 个元素( 编号 1..n ),第 i 个元素的能量值为 aia_iai
牛可乐可以选择至少 k 个元素来施放一次魔法,魔法消耗的魔力是这些元素能量值的极差。形式化地,若所用元素编号集合为 S,则消耗的魔力为 max⁡i∈S{ai}−min⁡i∈S{ai}

牛可乐要求每个元素必须被使用恰好一次
牛可乐想知道他最少需要多少魔力才能用完所有元素,请你告诉他。

 

 

 

 

 

 题意:不说了

题解:如果要最小的法力值,那铁定先排序,问什么排序?不解释这个

排序之后动态规划,因为所要最小法力值,而且最少要选k个元素,所以假设看k<=n<=2k时,那肯定全选成一个,类推所有的n%k!=0;

然后如果n%k==0那肯定是n/k段.

所以官方题解给个公式

 

 

 

#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 7;
int dp[N], pre, a[N], n, k;
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  sort(a + 1, a + 1 + n);
  pre = -a[1];
  for (int i = 1; i < k; ++i) dp[i] = 2e9;
  for (int i = k; i <= n; ++i) {
    dp[i] = pre + a[i];
    pre = min(pre, dp[i - k + 1] - a[i - k + 2]);
  }
  cout << dp[n];
  return 0;
}
 for (int i = 1; i < k; ++i) dp[i] = 2e9;这句太秀了
全部评论

相关推荐

头像
昨天 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
头像
10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务