const int N=150;
int a[N];
int s[N];
int f[N][N];
int n;
cin>>n;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
f[i][i]=0;
}
for(int len=2;len<=n;len++){
for(int start=1;start+len-1<=n;start++){
int r=start+len-1;
for(int k=1;k<r;k++){
f[start][r]=min(f[start][r],f[start][k]+f[k+1][r]+s[r]-s[start-1]);
}
}
}
cout<<f[1][n];
合 成 代 码
#include<bits/stdc++.h>
using namespace std;
const int N=150;
int a[N];
int s[N];
int f[N][N];
int n;
int main(){
cin>>n;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
f[i][i]=0;
}
for(int len=2;len<=n;len++){
for(int start=1;start+len-1<=n;start++){
int r=start+len-1;
for(int k=1;k<r;k++){
f[start][r]=min(f[start][r],f[start][k]+f[k+1][r]+s[r]-s[start-1]);
}
}
}
cout<<f[1][n];
return 0;
}