/*
作者:桦清_L
*/
#include <iostream>
using namespace std;
int sum[111] = {0};
int n,minV;
int dp[111][111] = {0};
int main()
{
cin >> n;
for(int i=1; i<=n; i++)
{
int a;
cin >> a;
sum[i] = sum[i-1] + a;
}
for(int len=2; len<=n; len++) //几个堆合并
{
for(int i=1; i<=n-len+1; i++) //开始堆号
{
int j=i+len-1;
minV = 0x7fffffff;
for(int k=i; k<j; k++) //结束堆号
{
minV = min(minV,dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]); //每一大堆都可分为两堆
}
dp[i][j] = minV;
}
}
cout << dp[1][n];
return 0;
}
code[vs] 1048石子合并(区间dp模板)
最新推荐文章于 2022-11-23 19:56:34 发布