提交时间:2023-11-14 21:36:53
运行 ID: 31094
#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+=(d[i]-d[mid]); } return ans; } 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=i;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]<<endl; return 0; }