#include #include #include using namespace std; const int inf=0x3f3f3f3f; const int maxmn=505; int n,m,d[maxmn],position[maxmn]; int dp[maxmn][maxmn],pre[maxmn][maxmn],suf[maxmn][maxmn]; int main() { #ifdef local freopen("pro.in","r",stdin); #endif scanf("%d%d",&n,&m); for(int i=1;i<=n-1;i++) scanf("%d",&d[i]); for(int i=2;i<=n;i++) position[i]=position[i-1]+d[i-1]; memset(dp,0x3f,sizeof(dp)); for(int i=1;i<=n;i++) { dp[i][1]=0; for(int j=i-1;j>=1;j--) dp[i][1]+=position[i]-position[j]; for(int j=i+1;j<=n;j++) dp[i][1]+=position[j]-position[i]; } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { pre[i][j]=pre[i][j-1]+position[j]-position[i]; } } for(int i=n;i>=1;i--) { for(int j=i-1;j>=1;j--) { suf[i][j]=suf[i][j+1]+position[i]-position[j]; } } for(int i=2;i<=n;i++) for(int j=2;j<=m;j++) { int p=i; for(int k=i-1;k>=1;k--) { while(p-1>=1&&position[i]-position[p-1]