#include <iostream>
using namespace std;
long long a[305],d[305][305],s[305][305];
int main()
{
int n,i,j,k,r;
while(cin>>n)
{
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{ d[i][i]=0;s[i][i]=a[i];
for(j=i+1;j<=n;j++)
s[i][j]=s[i][j-1]+a[j];
}
for(r=2;r<=n;r++)
for(i=1;i<=n-r+1;i++)
{
j=i+r-1;
d[i][j]=d[i][i]+d[i+1][j]+s[i][j];
for(k=i+1;k<j;k++)
d[i][j]=min(d[i][j],d[i][k]+d[k+1][j]+s[i][j]);
}
cout<<d[1][n]<<endl;
}
return 0;
}
沙子合并(又是区间动态规划)
最新推荐文章于 2021-02-24 23:56:20 发布