#5106. 软件工程

软件工程

题目描述

你是一个软件工程师(Software Engineer),是写后端的。有一天你们组的前端程序员的对象问你们组的前端程序员一个问题,前端程序员不会,于是把这个问题丢给了曾经学OI的你:

有一条数轴,上面有 nn 条线段,第 ii 条为 [li;ri][l_i; r_i]。现在他想把这 nn 条线段划分为不超过 kk 个集合,每条线段必须恰好属于其中一个集合。定义一个集合的权值为集合里所有线段的交的长度,定义一种划分方案的权值为所有集合的权值之和。求所有满足条件的划分方案中最大的权值。

虽然这和软件工程关系不大,不过热心的你一定可以帮助到同事的对象的。

输入格式

第一行两个正整数 n,kn,k

接下来 nn 行,每行两个正整数 li,ril_i, r_i,表示一条线段。

输出格式

输出一行一个整数表示最大的权值。

4 3
1 7
9 20
5 15
4 10
24

解释1

分成{[1,7],[4,10]},{[9,20]},{[5,15]}\{[1,7], [4,10]\},\{[9, 20]\} ,\{[5, 15]\} , 权值为3+11+10=243+11+10=24

5 3
15 16
9 14
14 20
4 9
8 14
12

解释2

分成$\{[15,16], [9,14], [4,9]\},\{[14, 20]\} ,\{[8, 14]\}$ , 权值为0+6+6=120+6+6=12

样例3

见附加文件 c3.in 与 c3.out 。此样例满足n500n \le 500
c3.in
c3.out

数据范围与提示

对于所有的测试点, 1kn50001 \le k\le n \le 5000, 1li<ri1061 \le l_i < r_i \le 10^6

  • 对于前 15%15 \% 的数据, 满足 n12n \le 12
  • 对于前 40%40\% 的数据, 满足 n500n \le 500
  • 另有 15%15 \% 的数据, 满足 n5000,k=2n \le 5000, k=2
  • 对于 100%100 \% 的数据, 满足 n5000n \le 5000