您的位置:首页 > 其它

Codevs 1048 石子归并 区间DP

2016-10-28 08:08 423 查看
Codevs 1048 石子归并

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;

#define MAXN (100+10)
int sum[MAXN];
int dp[MAXN][MAXN];

#define min(u,v) (u<v?u:v)
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i ++)
scanf("%d", &sum[i]);

for(int i = 1; i <= n; i ++)
sum[i] += sum[i-1];
memset(dp,63,sizeof(dp));
for(int i = 1; i <= n; i ++) dp[i][i] = 0;

for(int i = n-1; i >= 1; i --)
for(int j = i+1; j <= n; j ++)
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: