51nod 1021 石子归并

区间dp

递推比递归的常数要小  所以还是尽量学会递推吧

看题解  各种恶心啊  有木有

还是视频讲的直接呃   不过就是讲的有点儿慢

 

链接:https://www.bilibili.com/video/av12159085/

 

#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
int dp[120][120],s[120],sum[120];

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&s[i]),sum[i] = sum[i-1] +s[i];
    //先枚举区间长度即r-l 
    for(int d=1;d < n;d++)
    {
        for(int i=1,j;(j=i+d)<=n;i++)//再枚举区间起点
        {
            dp[i][j] = inf;
            for(int k=i;k<j;k++)
                dp[i][j] = min(dp[i][k]+dp[k+1][j],dp[i][j]);
            dp[i][j] += sum[j]-sum[i-1];
        }
    }

    printf("%d\n",dp[1][n]);

}

 

posted @ 2017-08-16 16:34  Draymonder  阅读(353)  评论(0编辑  收藏  举报