简单版和困难版的唯一区别在于对于 n,∑∣a∣,x 的限制不同。
最终,Nanami 还是来到了医院。
医院的病房排列成了一个长度为 n 的序列,同时每间病房上都写着一个数字 a。Nanami给了你一个整数 x,你需要把医院的病房划分成不相交的 k 段。称这 k 段为 [[l1,r1],[l2,r2],…,[lk,rk]],划分需要满足 l1=1,rk=n,li≤ri,ri=li+1−1(i<k)。
请你求出 ∑idx=1k∑i=lidxridx∑j=iridx[(∑s=ijas)=x] 的最小值,即划分的每段的子段的和为 x 的数量的和的最小值。
[expr] 代表表达式 expr 的布尔值,即如果 expr 为真,则 [expr]=1;否则,[expr]=0。
一个序列 a1,a2,…,an 的子段是指存在两个下标 l,r 满足 1≤l≤r≤n,那么 [al,al+1,…,ar] 就是该序列的一个子段,∑i=lrai 就是这个子段的和。
第一行,两个整数 n,k,x(1≤n≤105;1≤k≤min(20,n);∣x∣≤107),分别代表序列的长度、划分序列的段数与整数 x 的值。
第二行,一个长度为 n 的序列 a,其中 ∣ai∣≤105。
困难版的额外限制:保证 ∑i=1n∣ai∣≤107。
输出一个整数,代表在所有的划分方案中,划分的每段的子段的和为 x 的数量的和的最小值。
输入样例
4 2 2
2 2 -2 0
输出样例
2
输入样例
9 3 0
0 -1 -1 1 -1 1 1 -1 -1
输出样例
3
输入样例
1 1 3000
3000
输出样例
1
输入样例
6 2 -2
2 3 2 -1 0 3
输出样例
0
提示
在第一组样例中,采取如下的划分方式 [[1,1],[2,4]],答案为 1+1=2。
在第二组样例中,采取如下的划分方式 [[1,5],[6,7],[8,9]],答案为 3+0+0=3。