#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[501][501];
int a[501];
int d[501][501];
int dd[501][501];
int main()
{
memset(f,1,sizeof(f));
int m,n;
scanf("%d%d",&m,&n);
for(int i=2;i<=m;i++)
{
scanf("%d",&a[i]);
a[i]+=a[i-1];
}
for(int i=1;i<=m;i++)
{
f[i][1]=0;
for(int j=i;j<=m;j++)
{
d[i][j]=max(a[i]-a[j],a[j]-a[i]);
d[j][i]=d[i][j];
}
}
for(int i=1;i<=m;i++)
for(int p=1;p<=i;p++)
f[i][1]+=d[p][(i+1)/2];
for(int i=1;i<=m;i++)
{
for(int j=i;j<=m;j++)
for(int k=i;k<=j;k++)
dd[i][j]+=d[k][(i+j)/2];
}
for(int i=1;i<=m;i++)
{
for(int j=2;j<=i;j++)
{
for(int k=1;k<=i-1;k++)
{
f[i][j]=min(f[i][j],f[k][j-1]+dd[k+1][i]);
}
}
}
cout<<f[m][n]<<endl;
return 0;
}
1197:山区建小学
最新推荐文章于 2024-10-16 19:37:06 发布