0
已解决
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,a[40005],f[5024][5024],sum[40005];
inline int read(){
int s=0,f=1;
char ch=getchar();
while((ch<'0'||ch>'9')&&ch!=EOF){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*f;
}
int main()
{
scanf("%d",&n);
for(register int i=1;i<=n;i++)
a[i]=read();
memset(f,0x3f,sizeof(f));
for(register int i=1;i<=n;i++)
sum[i]=sum[i-1]+a[i];
for(register int i=1;i<=n;i++)
f[i][i]=0;
for(register int l=1;l<n;l++)
for(register int i=1;i<=n;i++)
{
register int j=i+l;
if(j>n)
break;
for(register int k=1;k<j;k++)
if(f[i][j]>f[i][k]+f[k+1][j]+sum[j]-sum[i-1])
f[i][j]=f[i][k]+f[k+1][j]+sum[j]-sum[i-1];
}
printf("%d\n",f[1][n]);
return 0;
}
用了些卡常技巧,结果......

求助怎么AC啊
