rt,求调
#include<bits/stdc++.h>
using namespace std ;
const int N=505 ;
int a[N],s[N],dp[N][N],cost[N][N] ;
int main(){
int n,m ;
cin >> m >> n ;
for (int i=1 ; i<m ; i++){
cin >> a[i] ;
s[i]=s[i-1]+a[i] ; //求前缀和
}
for (int i=1 ; i<=m ; i++){
for (int j=i+1 ; j<=m ; j++){
int mid=i+j>>1 ;
for (int k=i ; k<=j ; k++){
if (mid<k)
cost[i][j]+=s[k-1]-s[mid-1] ;
else
cost[i][j]+=s[mid-1]-s[k-1] ;
}
}
}
memset(dp,0x3f,sizeof(dp)) ;
for (int i=1 ; i<m ; i++){
dp[i][1]=cost[1][i] ;
dp[i][i]=0 ;
}
for (int i=2 ; i<=m ; i++){
for (int j=2 ; j<i && j<=n ; j++){
for (int k=j-1 ; k<i ; k++){
dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]) ;
}
}
}
cout << dp[m][n] ;
return 0 ;
}