#P3357. 最长k可重线段集问题

最长k可重线段集问题

题目描述

给定平面 xOyx-O-ynn 个开线段组成的集合 II,和一个正整数 kk 。试设计一个算法,从开线段集合 II 中选取出开线段集合 SIS\subseteq I ,使得在 xx 轴上的任何一点 ppSS 中与直线 x=px=p 相交的开线段个数不超过 kk,且zSz\sum\limits_{z\in S}|z|达到最大。这样的集合 SS 称为开线段集合 II 的最长 kk 可重线段集。zSz\sum\limits_{z\in S}|z| 称为最长 kk 可重线段集的长度。

对于任何开线段 zz,设其断点坐标为 (x0,y0)(x_0,y_0)(x1,y1)(x_1,y_1),则开线段 zz 的长度 z|z| 定义为:

z=(x1x0)2+(y1y0)2|z|=\lfloor\sqrt{(x_1-x_0)^2+(y_1-y_0)^2}\rfloor

对于给定的开线段集合 II 和正整数 kk,计算开线段集合 II 的最长 kk 可重线段集的长度。

输入格式

文件的第一 行有 22 个正整数 nnkk,分别表示开线段的个数和开线段的可重叠数。

接下来的 nn 行,每行有 44 个整数,表示开线段的 22 个端点坐标。

输出格式

程序运行结束时,输出计算出的最长 kk 可重线段集的长度。

4 2
1 2 7 3
6 5 8 3
7 8 10 5
9 6 13 9 
17

提示

1n5001\leq n\leq 5001k131 \leq k \leq 13,坐标值在 int 范围内。