|–>题目传送门<–|

题目描述

学生会正在为体育节的接力赛做准备。学生会由 n个成员组成,他们将在比赛中一个一个地跑,第 i i i 个人的速度是 s i si si,第 i次接力会产生一个差异值 d i d_i di​,它的值是前 i i i个参与接力赛的人的速度最大值与最小值的差,也就是说,我们假设第 i i i个参与比赛的人的速度是 a i a_i ai​,那么 d i = max ⁡ ( a 1 , a 2 , . . . , a i ) − min ⁡ ( a 1 , a 2 , . . . , a i ) d_i =\max(a_1,a_2,...,a_i) - \min(a_1,a_2,...,a_i) di​=max(a1​,a2​,...,ai​)−min(a1​,a2​,...,ai​)。现在你可以任意安排参加比赛的人的顺序,一个人只能参与一次,且每个人都必须参与,请你求出 d 1 + d 2 + . . . + d n d_1+d_2+...+d_n d1​+d2​+...+dn​的最小值。

题解

首先考虑插入数字 a [ i ] a[i] a[i]的影响:

  • 如果 a [ i ] a[i] a[i]是区间 max ⁡ \max max,那么新增 a [ i ] − m i n b e f o r e a[i] - min_{before} a[i]−minbefore​
  • 如果 a [ i ] a[i] a[i]是区间 min ⁡ \min min,那么新增 m a x b e f o r e − a [ i ] max_{before} - a[i] maxbefore​−a[i]
  • 如果都不是,那么新增 m a x b e f o r e − m i n b e f o r e max_{before} - min_{before} maxbefore​−minbefore​

那么显然,每插入一个区间最大值,新增极差的大小都会 u p up up,从贪心的角度考虑,我们应当尽可能晚的插入区间最大值。所以我们可以先对所有的 a i a_i ai​排序。

设 d p [ l ] [ r ] dp[l][r] dp[l][r]表示区间 [ l , r ] [l,r] [l,r]的答案(和的最小值)。

考虑一段区间 [ l , r ] [l, r] [l,r]的状态:显然可以由( c o n ( x ) con(x) con(x)表示 x x x的贡献):

  1. c o n ( a [ l ] ) + d p [ l + 1 ] [ r ] con(a[l]) + dp[l + 1][r] con(a[l])+dp[l+1][r]
  2. c o n ( a [ r ] ) + d p [ l ] [ r − 1 ] con(a[r]) + dp[l][r - 1] con(a[r])+dp[l][r−1]

两个状态转移而来。同时由于我们对整个序列进行过排序,那么可以得知:
c o n ( a [ l ] ) = c o n ( a [ r ] ) = ( a [ r ] − a [ l ] ) con(a[l]) = con(a[r]) = (a[r] - a[l]) con(a[l])=con(a[r])=(a[r]−a[l])

那么可以直接跑一个区间 d p dp dp,计算答案即可。

#include <bits/stdc++.h>
#define int long longconst int N = 2e3 + 10;
int a[N], dp[N][N];inline bool cmp(const int &a, const int &b){ return a < b; }inline void solve(){int n = 0; std::cin >> n;for(register int i = 1; i <= n; i++) std::cin >> a[i];std::sort(a + 1, a + 1 + n, cmp);for(int len = 2; len <= n; len++){for(int l = 1; l <= n; l++){int r = l + len - 1;if(r > n) continue;dp[l][r] = (a[r] - a[l]) + std::min(dp[l + 1][r], dp[l][r - 1]); }}std::cout << dp[1][n] << std::endl;
}signed main(){solve();return 0;
}

NamoCamp 每日一题 体育节 区间DP相关推荐

  1. NamoCamp 每日一题 namonamo 折半搜索

    |–>传送门<–| 题目大意 给定一个长度是偶数,仅有小写字母构成的字符串,判断是否能被分成两个完全相同的子序列.(字符串长度 1 ≤ ∣ s ∣ ≤ 40 1 \leq |s| \leq ...

  2. HDU 5115 (区间DP)

    题目大意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼 ...

  3. P1063 能量项链(C++_区间dp)

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  4. 【leetcode】最长回文子串(区间dp)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  5. 【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)

    题目链接:https://ac.nowcoder.com/acm/problem/14248 来源:牛客网 题目描述 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x ...

  6. 【每日DP】day13、P3147 [USACO16OPEN]262144 (区间DP,2048游戏)难度⭐⭐⭐★

    P3147 [USACO16OPEN]262144 P 想到合并,自然就想到区间dp,一个被合成的数之前是一个区间,并且由两个数比它小 111 的区间合成.可麻烦的是,我们并不知道之前的两个区间长度各 ...

  7. 合并石子 区间dp水题

    合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...

  8. 区间dp——cf1025D二叉搜索树的中序遍历好题!

    这题帮我复习了一下BST的中序遍历.. 因为给定的数组是递增的,那么BST的中序遍历一定是1 2 3 4 5 6 7 8 9 ... n 即[l,r]为左子树,那么根节点就是r+1,反之根节点就是l- ...

  9. 刷题周记(八)——#区间DP:多边形、清空字符串 #状态机:股票买卖I~V、大盗阿福

    文章目录 --2020年12月13日(周日)------------------ #区间DP 一.多边形 --2020年12月14日(周一)------------------ --2020年12月1 ...

最新文章

  1. 2021年春季学期-信号与系统-第十二次作业参考答案
  2. 中文乱码,也许这个小技巧可以帮到你
  3. 我的简书两月记:数据可视化
  4. ClickHouse | MergeTree引擎之数据分区
  5. 3d max 安装和导入rvt模型失败
  6. 验证Vsphere 5 支持大于2TB磁盘
  7. MySQL索引背后的数据结构及算法原理(employees实例)
  8. 又被ESLint 调戏了!!! ESLint:Newline required at end of file but not found. eslint(eol-last) [12, 22]
  9. [PHP] - Laravel - CSRF token禁用方法与排除验证csrf_token的url设置
  10. linux网络完全与防护
  11. 王庆的边缘计算(第一章)
  12. C++代码字符舞-极乐净土
  13. f1c100A运行linux,荔枝派 Nano 全志 F1C100s 编译运行 Linux 笔记
  14. 劳易测BPS300i SM 100条码定位
  15. excel文件修复工具_Excel文件打开后出错,部分内容丢失的修复技巧
  16. wpsmac和pc版的区别_Mac系统下金山WPS和微软Office 哪个更好更好用
  17. CCS 2021 | 自动化网络流量分析新方向
  18. java since,javadoc:@version和@since
  19. 轩小陌的Python笔记-day03 Python基础
  20. Apex英雄手游国服何时上线 Apex英雄手游和端游互通吗

热门文章

  1. 卖客星球 自己点击下载数据
  2. 关于DBN fine-tunes使用BP多于up-down算法的一点看法
  3. 为什么要发展跨境电商?
  4. 数据结构 算法的时间复杂度与空间复杂度的计算(带有例题讲解)
  5. 2018蓝桥杯模拟赛(一)H【floyd求最短路径】
  6. Linux命令 - chgrp命令
  7. signal(SIGTERM, handler)抛出异常解决方法
  8. c语言作业 求1到n的阶乘和,C语言,计算1到n的阶乘求和问题
  9. windows如何配置本地域名
  10. 搭建nginx代理服务器