猫猫cpu的缓存-题解

时间:2024-10-03 15:23:28

这是一道典型的思路难题,代码20行以内,所以就不贴代码了。

15pts n ≤ 20 , m ≤ 10 n\leq 20,m\leq 10 n20,m10

这个好拿,但我没去拿,暴力枚举即可
验证部分,可以发现,由于这些长度为 k k k的区间可以重叠,重叠的部分对答案没有影响,所以,对于任何一个长度大于 k k k的连续段都是可以拼出的

70pts n ≤ 1 0 9 , m ≤ 5000 n\leq 10^9,m\leq 5000 n109,m5000

其实中间还有30pts与50pts,但不如70pts好拿。
观察可以发现, n n n已然几乎没用,所以只考虑 m m m,可以发现数据允许 O ( m 2 ) O(m^2) O(m2)通过
考虑 d p dp dp,发现存在以下两种情况
在这里插入图片描述

对于第一种情况,较好考虑,状态转移方程为
d p [ i ] = m i n i ≥ j { d p [ j − 1 ] + ( a [ j ] − a [ i ] ) + 1 } dp[i]=min_{i\geq j}\{dp[j-1]+(a[j]-a[i])+1\} dp[i]=minij{dp[j1]+(a[j]a[i])+1}
对于第二种情况,我们固然希望该区间段长度最短,为 k k k,且覆盖点最多,就是距离 i i i最远 j j j的满足 a [ i ] − a [ j ] + 1 < k a[i]-a[j]+1<k a[i]a[j]+1<k i ≥ j i\geq j ij

于是就可以暴力枚举

100pts

这就简单了,因为 a i a_i ai递增,并且不存在距离最大值,尺取即可。