您的位置:首页 > 其它

51nod 1021 石子归并

2016-10-28 21:58 197 查看
题目链接:传送门

从沈阳赛区打铁回来更一发(东北真冷啊)….

经典的dp问题

dp[i][j]是i到j的最小花费

dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1])

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define mod 1000000007
#define N 101
int a
,dp

,sum
;
int main(){
int i,j,n,m;
cin>>n;
sum[0]=0;
for(i=1;i<=n;i++)
{
cin>>a[i];
if(i==1) sum[i]=a[i];
else  sum[i]=sum[i-1]+a[i];
dp[i][i]=0;
}
for(int t=1;t<n;t++)
for(i=1;i<=n-t;i++){
j=i+t;
dp[i][j]=mod;
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]);
}
cout<<dp[1]
<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: