为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= 1,000,000). Betsy想找出一部分测量结果来总结整天的气压分布. 她想用K(1 <= K <= N)个数s_j (1 <= s_1 < s_2 < ... < s_K <= N)来概括所有测量结果. 她想限制如下的误差: 对于任何测量结果子集,每一个非此子集中的结果都会产生误差.总误差是所有测量结果的误差之和 .更明确第说, 对于每一个和所有s_j都不同的i:
* 如果 i 小于 s_1, 误差是: 2 * | M_i - M_(s_1) | * 如果i在s_j和s_(j+1)之间,误差是: | 2 * M_i - Sum(s_j, s_(j+1)) | 注:Sum(x, y) = M_x + M_y; (M_x 和 M_y 之和)
* 如果i大于s_K,误差为: 2 * | M_i - M_(s_K) | Besty给了最大允许的误差E (1 <= E <= 1,000,000),找出最小的一部分结果史得误差最多为E.
输入输出格式
输入格式:
* Line 1: Two space-separated integers: N and E
* Lines 2..N+1: Line i+1 contains a single integer: M_i
输出格式:
* Line 1: Two space-separated integers: the size of the smallest subset of measurements that produces an error of at most E and the least possible error for the subset of that size.
4 20 10 3 20 40
2 17
思路:
题意困扰了我很长时间,这翻译实在是不适合我这样的蒟蒻 BZOJ还没有这道题。。。。
经过参考别人的题解,终于弄懂了这道题的意思。
考虑这样的一种Dp F[I][J]代表选了J个,并且一定选I这个数据的最小误差。这样可以通过暴力枚举K的方式来更新状态,题里的状态贡献描述实在是很恶心,总之就是分成三类 ,我们通过一次预处理来确定贡献,在Dp的时候进行转移即可。
值得注意的是本题要开LongLong
代码就不上了,上了也是别人的