125MB过不了,求助
#include <bits/stdc++.h>
#define P 10007
#define mid (l + r >> 1)
using namespace std;
const int N = 50005;
int n, m, l, r, k, s, t, S[N], a[N], f[N][1005], sum[N][1005];
// f[i][j]=f[k][j-1] (S[i]-S[k]<=mid)
int check(int M){
int now = 0, tot = 1;
for (int i = 1; i <= n; ++i){
if (now + a[i] <= M) now += a[i];
else now = a[i], ++tot;
}
if (tot <= m) return 1;
else return 0;
}
int main(){
cin >> n >> m; ++m;
for (int i = 1; i <= n; ++i){
cin >> a[i];
S[i] = S[i - 1] + a[i];
l = max(l, a[i]); r += a[i];
}
while (l <= r){
if (check(mid)) r = mid - 1;
else l = mid + 1;
}
int ans = l, tmp = 0;
f[0][0] = 1;
for (int i = 0; i <= n; ++i)
sum[i][0] = 1;
int k = -1;
for (int i = 1; i <= n; ++i){
while (S[i] - S[k + 1] > ans)
++k;
for (int j = 1; j <= min(i, m); ++j){
f[i][j] = (sum[i - 1][j - 1] - (k == -1 ? 0 : sum[k][j - 1])) % P;
sum[i][j] = (sum[i - 1][j] + f[i][j]) % P;
}
}
for (int j = 1; j <= m; ++j)
tmp = (tmp + f[n][j]) % P;
cout << ans << ' ' << (tmp + P) % P;
}