#include<iostream>
#include<string.h>
using namespace std;
int a[301];
__int64 cost[301][301];
__int64 dp[301][31];
int main()
{
int v,p;
while(cin>>v>>p)
{
for(int i=1;i<=v;i++)
cin>>a[i];
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++) cost[i][j]=999999999;
for(int i=1;i<=v;i++) cost[i][i]=0;
for(int i=1;i<=v;i++)
for(int j=i+1;j<=v;j++)
{
int mid=i+(j-i+1)/2;
int sum=0;
for(int k=mid-1;k>=i;k--)
sum+=a[mid]-a[k];
for(int k=mid+1;k<=j;k++)
sum+=a[k]-a[mid];
cost[i][j]=sum;
}
memset(dp,0,sizeof(dp));
for(int i=2;i<=v;i++)
{
dp[i][1]=cost[1][i];
for(int j=2;j<=(i<p?i:p);j++)
{
dp[i][j]=999999999;
for(int k=1;k<=i-1;k++)
{
int c=dp[k][j-1]+cost[k+1][i];
if(c<dp[i][j])
dp[i][j]=c;
}
}
}
cout<<dp[v][p]<<endl;
}
return 0;
}
poj1045
最新推荐文章于 2019-09-20 19:16:00 发布