首页 > 其他 > 详细

区间DP

时间:2021-01-29 09:52:57      阅读:25      评论:0      收藏:0      [点我收藏+]

先在小区间DP得到最优解,再合并小区间求大区间最优解,一般把左右两个相邻的子区间合并,需要从小到大枚举所有可能的区间。

http://120.78.128.11/Problem.jsp?pid=2385

码个代码,我再琢磨两下之后完善。(代码是一排石子,和上题有点区别)

#include<bits/stdc++.h>
using namespace std;
const int INF=1<<30;
const int N=300;
int sum[N],n;

int Minval(){
    int dp[N][N];
    for(int i=1;i<=n;i++)
    dp[i][i]=0;
    for(int len=1;len<n;len++){
        for(int i=1;i<=n-len;i++){
            int j=i+len;
            dp[i][j]=INF;
            for(int k=i;k<j;k++)
            dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
        }
    }
    return dp[1][n];
}

int main()
{
    while(~scanf("%d",&n)){
        sum[0]=0;
        for(int i=1;i<=n;i++){
            int x;
            scanf("%d",&x);
            sum[i]=sum[i-1]+x;
        }
        printf("%d\n",Minval());
    }
    return 0;
}

 

区间DP

原文:https://www.cnblogs.com/Untergehen/p/14342335.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!