1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <iostream> 5 6 #define INF 0xfffffff 7 using namespace std; 8 const int maxn = 100 + 5; 9 int a[maxn]; 10 int sum[maxn]; 11 int dp[maxn][maxn]; 12 //dp[i][j] 从i到j所需的最少 13 14 int main(){ 15 ios::sync_with_stdio(false); 16 /* 17 freopen("in.txt", "r", stdin); 18 freopen("out.txt", "w", stdout); 19 */ 20 int n; 21 cin >> n; 22 for (int i = 1; i <= n; i++){ 23 cin >> a[i]; 24 sum[i] = sum[i - 1] + a[i]; 25 } 26 //init 27 28 for (int l = 2; l <= n; l++){ 29 //中间的长度 30 for (int sta = 1; sta <= n - l + 1; sta++){ 31 int endd = sta + l - 1; 32 int Min = INF; 33 for (int k = sta; k < endd; k++){ 34 if (dp[sta][k] + dp[k + 1][endd] + sum[endd] - sum[sta - 1] < Min){ 35 Min = dp[sta][k] + dp[k + 1][endd] + sum[endd] - sum[sta - 1]; 36 } 37 } 38 dp[sta][endd] = Min; 39 } 40 } 41 cout << dp[1][n] << endl; 42 43 //fclose(stdin); 44 //fclose(stdout); 45 system("pause"); 46 return 0; 47 }