您的位置:首页 > 其它

【51nod】1021 石子归并

2017-10-09 21:47 239 查看

题目:

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]
<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: