#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int w[200];int sum[200];
int f[200][200];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
sum[i]=sum[i-1]+w[i];
}memset(f,127/3,sizeof(f));
for(int i=1;i<=n;i++)f[i][i]=0;
for(int j=n-1;j>=1;j--)
{
for(int i=j+1;i<=n;i++)
{
int l=i+j-1;
for(int k=j;k<=i-1;k++)
{
f[j][i]=min(f[j][i],f[j][k]+f[k+1][i]+sum[i]-sum[j-1]);
}
}
}
cout<<f[1][n];
return 0;
#include<cstdio>
#include<cstring>
using namespace std;
int w[200];int sum[200];
int f[200][200];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
sum[i]=sum[i-1]+w[i];
}memset(f,127/3,sizeof(f));
for(int i=1;i<=n;i++)f[i][i]=0;
for(int j=n-1;j>=1;j--)
{
for(int i=j+1;i<=n;i++)
{
int l=i+j-1;
for(int k=j;k<=i-1;k++)
{
f[j][i]=min(f[j][i],f[j][k]+f[k+1][i]+sum[i]-sum[j-1]);
}
}
}
cout<<f[1][n];
return 0;
}
发现这种方法比那个i+j的好理解多了,,是我太弱了吗ORZ