提交时间:2023-11-14 21:32:14
运行 ID: 31088
#include<iostream> using namespace std; int m,n; int d[505]; int dis[505][505]; int dp[505][505]; int cal(int x,int y){ int mid=(x+y)/2,ans=0; for(int i=x;i<=y,i++){ ans+=abs(d[i]-d[mid]); } } int main() { cin>>m>>n; for(int i=2;i<=m;i++){ scanf("%d",&d[i]); d[i]+=d[i-1]; } for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ dis[i][j]=cal(i,j); } } for(int i=1;i<=m;i++){ for(int j=1;j<=n&&j<=i;j++){ if(j==1) dp[i][j]=dis[1][i]; else{ for(int k=1;k<i;k++){ dp[i][j]=min(dp[i][j],dp[k][j-1]+dis[k+1][i]); } } } } cout<<dp[m][n]; return 0; }