题目传送门


题目描述

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

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


输入描述:

第一行两个正整数 n , k \text{}n, k n,k 。

第二行 n 个整数 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1​,a2​,…,an​。

保证 1 ≤ k ≤ n ≤ 3 × 1 0 5 1\leq k\leq n\leq 3\times 10^5 1≤k≤n≤3×105, 0 ≤ a i ≤ 1 0 9 0\leq a_i\leq 10^9 0≤ai​≤109。


输出描述:

输出一行,一个整数表示答案。


输入

4 2
8 7 114514 114513


输出

2


说明

使用第 1、2 个元素施放一次魔法,消耗魔力为 8-7=1;第 3、4 个元素施放一次魔法,消耗魔力为 114514-114513=1;两个魔法一共消耗 2 点魔力。


题解

  • 先将元素按能量值排序,下文默认已排序。

  • 可以证明存在一个最优方案,满足每个魔法一定消耗一段连续的元素。

  • 注意是至少取 k k k 段,那么从 k + 1 k+1 k+1 开始DP

  • 定义 d p [ i ] 代 表 : 前 i 项 最 优 解 dp[i]代表:前 i 项最优解 dp[i]代表:前i项最优解,那么可以得到,对于任意位置:

    1. 是拓展前面,从长度 m m m 变成 m + 1 m+1 m+1; ( 数 学 归 纳 法 思 想 , 任 意 位 置 肯 定 都 是 合 法 的 , m > = k 成 立 ) (数学归纳法思想,任意位置肯定都是合法的,m>=k成立) (数学归纳法思想,任意位置肯定都是合法的,m>=k成立)
    2. 断开前面,从当前位置往前 k − 1 k-1 k−1 项,和当前第 i i i 项,组成长度为 k k k 的序列。
  • 时 间 复 杂 度 O ( N − K ) 时间复杂度 O(N-K) 时间复杂度O(N−K)


#AC-Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 3e5 + 5;ll a[maxn];
ll dp[maxn];
int main() {int n, k;   cin >> n >> k;for (int i = 1; i <= n; ++i)   dp[i] = LLONG_MAX, cin >> a[i];sort(a + 1, a + 1 + n);dp[k] = a[k] - a[1];for (int i = k + 1; i <= n; ++i)dp[i] = min(dp[i - 1] - a[i - 1] + a[i], dp[i - k] + a[i] - a[i - k + 1]);cout << dp[n] << endl;
}

2020牛客寒假算法基础集训营2——H.施魔法【DP】相关推荐

  1. (构造+二进制)2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II

    2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II 思路: 一开始我是考虑全部都是B会怎么样,然后删改,结果到后面发现很难推到普遍规律(可能是因为我没看出来). 看了题解之后,觉得这题出的挺有意 ...

  2. 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II二进制详解

    2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II B 牛牛的DRB迷宫II 输入: 25 输出: 5 5 RBBBR BBBBB BBBDB BDBBB RBBBB 题解 由图求方案数,我们 ...

  3. 2020牛客寒假算法基础集训营1

    2020牛客寒假算法基础集训营1 honoka和格点三角形 题目描述 输入描述 输出描述 示例 解题思路 代码 kotori和bangdream 题目描述 输入描述 输出描述 示例 解题思路 代码 u ...

  4. 2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I

    2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I 题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示 ...

  5. 2020牛客寒假算法基础集训营3

    链接:link 来源:牛客网 A 牛牛的DRB迷宫I 题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于 ...

  6. 2020牛客寒假算法基础集训营4

    链接:link 来源:牛客网 A 欧几里得 题目描述 现在,如果已知 g c d ( a , b ) gcd(a,b) gcd(a,b) 共递归了 n n n次,求所有可能的 a , b a,b a, ...

  7. 2020牛客寒假算法基础集训营5:B.牛牛战队的比赛地(二分/三分)

    整理的算法模板:ACM算法模板总结(分类详细版) 链接:https://ac.nowcoder.com/acm/contest/3006/B 来源:牛客网 题目描述 由于牛牛战队经常要外出比赛,因此在 ...

  8. 2022牛客寒假算法基础集训营1 ——H 牛牛看云

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西. 例如,现在天上飘过了一片长条状的云彩,hina说这片云长得 ...

  9. 2020牛客寒假算法基础集训营3——J.牛牛的宝可梦Go【最短路 DP(01背包) 复杂度优化】(附优化分析)

    题目传送门 题目描述 牛牛所在的W市是一个不太大的城市,城市有n个路口以及m条公路,这些双向连通的公路长度均为1,保证你可以从一个城市直接或者间接移动到所有的城市.牛牛在玩宝可梦Go,众所周知呢,这个 ...

最新文章

  1. 计算机设备布局图,针对不同设备类型创建仪表板布局
  2. JAVA8 Optional新特性和使用详解
  3. 胶囊网络全新升级!引入自注意力机制的Efficient-CapsNet
  4. Swift之深入解析如何将代码添加为自定义LLDB命令
  5. centos操作系统搭建Lamp环境(apache php mysql)
  6. 国际旅游管理专业跨专业考计算机,旅游管理考研我想跨专业考旅游管理专业的研究 – 手机爱问...
  7. arm-2009q1-203-arm-none-linux-gnueabi.bin安装方法
  8. [转载]在ASP.NET MVC中,使用Bundle来打包压缩js和css
  9. KNN分类算法原理与Python+sklearn实现根据身高和体重对体型分类
  10. usermod 修改用户信息
  11. [剑指offer] 7. 斐波那契数列 (递归 时间复杂度)
  12. python2.7怎么升级python3_python2.7升级至python3.6
  13. [hgo学习]-tutorial 03
  14. vue 文字转语音mp3_vue项目或网站上实现文字转换成语音播放功能
  15. C语言基础——二维数组应用(一)井字棋
  16. 安卓默认下载工具_PanDownload安卓内测版 — 不限速下载工具
  17. Mac操作系统输入法快捷键设置
  18. 1.Modbus通信协议-什么是Modbus?
  19. 奇偶性与魔术(一)——奇偶性的数学本质
  20. apache mod_rewrite 简略说明

热门文章

  1. java接口中的抽象方法_Java中的接口与抽象方法
  2. 我的java学习笔记之杰信商务管理平…
  3. 基于linux的mp3播放实现代码
  4. sizeof计算结构体长度
  5. 《小软笔记》隐私政策
  6. Typora自动保存以及未保存文件找回
  7. 一些电商产品拍摄的小技巧
  8. Linux之mkdir创建文件夹
  9. 如何关闭MacBook的键盘背光
  10. dd linux命令 分区,使用dd命令备份Linux分区