为了研究农场的气候,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.
D P DP DP
设 f [ i ] [ j ] f[i][j] f[i][j] 表示切了 i i i 次,当前切的位置为 j j j 的最小误差
那么转移显然枚举上一个切的位置 k ∈ [ 0 , j ) k \in [0,j) k∈[0,j) ,有 f [ i ] [ j ] = m i n ( f [ i ] [ j ] , f [ i − 1 ] [ k ] + g [ k ] [ j ] ) f[i][j]=min(f[i][j],f[i-1][k]+g[k][j]) f[i][j]=min(f[i][j],f[i−1][k]+g[k][j])
其中 g [ k ] [ j ] g[k][j] g[k][j] 是分的两端为 k , j k,j k,j 时中间产生的误差,这个可以 n 3 n^3 n3 预处理好