3 1 2 3 7 13 7 8 16 21 4 18
9 239
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <cmath>
const int maxn=220;
using namespace std;
int dp[maxn][maxn];
int sum[maxn];
int main()
{
int n;
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
cin>>sum[i];
sum[i]+=sum[i-1];
}
for(int i=0;i<=n;i++)
dp[i][i]=0;
for(int k=1;k<n;k++)
{
for(int i=1;i<=n-k;i++)
{
dp[i][i+k]=99999999;
for(int j=i;j<i+k;j++)
if(dp[i][i+k]>dp[i][j]+dp[j+1][i+k]+sum[i+k]-sum[i-1])
dp[i][i+k]=dp[i][j]+dp[j+1][i+k]+sum[i+k]-sum[i-1];
}
}
cout<<dp[1][n]<<endl;
}
return 0;
}
原文地址:http://blog.csdn.net/liusuangeng/article/details/38639079