#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<fstream>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=205;
int n,m;
int dp[maxn][maxn];
int sum[maxn];
int main()
{
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
int w;
scanf("%d",&w);
sum[i]=sum[i-1]+w;
}
for(int l=1;l<n;l++)//区间距离
{
for(int i=1;i<=n-l;i++)//左端点
{
int j=i+l;//右端点
dp[i][j]=inf;
for(int k=i;k<j;k++)//枚举中间的所有点
{
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);//+sum[j]-sum[i-1]写在括号里面
}
}
}
printf("%d\n",dp[1][n]);
}
return 0;
}
nyoj737 区间DP
最新推荐文章于 2018-08-17 07:22:08 发布