#include<bits/stdc++.h>
#define int long long
#define mem(x,y) memset(x,y,sizeof(x))
#define si set <node> :: iterator
using namespace std;
int read(){
int s = 0,w = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
return s * w;
}
int n,m;
int a[1000010];
int pre[1000010];
int dp[300][300][300];
int ans = 1e18;
signed main(){
cin>>n>>m;
for(int i = 1;i <= n;i ++)a[i] = read();
for(int i = 1;i <= n;i ++)pre[i] = pre[i - 1] + a[i];
mem(dp,0x3f);
for(int i = 0;i <= m;i ++)dp[0][0][i] = 0;
for(int i = 0;i <= n - 1;i ++){
for(int j = 0;j <= m;j ++){
for(int k = 0;k <= j;k ++){
int v = m - j;
if(i != 0)v = min(v,k);
for(int l = 0;l <= v;l ++){
dp[i + 1][j + l][l] = min(dp[i + 1][j + l][l],dp[i][j][k] + abs(j + l - pre[i + 1]));
}
}
}
}
for(int i = 0;i <= m;i ++)ans = min(ans,dp[n][m][i]);
cout<<ans;
}
没有任何优化,妥妥的 O(n×m3) ,怎么就过了