#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;
}沙子合并(又是区间动态规划)
最新推荐文章于 2023-07-27 10:08:33 发布
本文探讨了使用C++解决序列中从第一个元素到最后一个元素的最短路径问题,通过动态规划方法实现最优路径查找。
2120

被折叠的 条评论
为什么被折叠?



