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