51nod 1021 石子归并

这里写图片描述

区间DP基础题

#include <bits/stdc++.h>

using namespace std;

const int MAXN=105;
const int INF=0x3f3f3f3f;

int a[MAXN],sum[MAXN];
int dp[MAXN][MAXN];







int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        sum[i]=sum[i-1]+a[i];
    }

    for(int len=2;len<=n;len++)//规定长度
    {
        for(int i=1;i+len-1<=n;i++)//规定开始位置
        {
            dp[i][i+len-1]=INF;
            for(int k=i;k<=i+len-1;k++)//规定截止位置
            {
                dp[i][i+len-1]=min(dp[i][i+len-1],dp[i][k]+dp[k+1][i+len-1]+sum[i+len-1]-sum[i-1]);
            }
        }
    }
    cout<<dp[1][n]<<endl;



    return 0;
}
原文地址:https://www.cnblogs.com/bryce1010/p/9386936.html