//和矩阵连乘一样
#include <iostream>
#include <cstring>
using namespace std;
int dp();
void fun();
int a[210];
int d[210][210];
int sum[210][210];
int n;
int main()
{
while(cin >> n)
{
for(int i = 1; i <= n; i++)
{
cin >> a[i];
sum[i][i] = a[i];
}
memset(d, 0x7f, sizeof(d));
fun();
for(int i = 1; i <= n; i++)
d[i][i] = 0;
cout << dp() << endl;
}
}
int dp()
{
for(int k = 2; k <= n; k++)
{
for(int i = 1; i <= n-k+1; i++)
{
int j = i+k-1;
for(int l = i; l < j; l++)
d[i][j] = min(d[i][l] + d[l+1][j] + sum[i][j], d[i][j]);
}
}
return d[1][n];
}
void fun()
{
for(int i = 1; i <= n; i++)
for(int j = i + 1; j <= n; j++)
sum[i][j] = sum[i][j-1]+a[j];
}
南阳理工OJ_题目737 石子合并(一)
最新推荐文章于 2021-03-09 12:15:10 发布