【51nod】1021 石子归并

来源:互联网 发布:淘宝软件下载电脑版 编辑:程序博客网 时间:2024/06/13 23:43

题目:

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1021


推荐大家可以看看这个视频
https://www.bilibili.com/video/av12159085/
视频讲解更好理解

代码:

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const int MAXN=110;const int inf=0x3f3f3f3f;int dp[MAXN][MAXN],a[MAXN],sum[MAXN];int main(){    int N;    cin>>N;    int i,j,k,h;    for(i=1;i<=N;i++)        cin>>a[i],sum[i]=sum[i-1]+a[i];    for(h=1;h<N;h++)    {        for(i=1;(j=h+i)<=N;i++)  //i表示开始位置,j表示区间末位置        {            dp[i][j]=inf;            for(k=i;k<=j;k++)            {                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);  //k表示分割的位置            }            dp[i][j]+=sum[j]-sum[i-1];        }    }    cout<<dp[1][N]<<endl;    return 0;}

原创粉丝点击