博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nyoj 石子合并(一) 区间dp *
阅读量:5888 次
发布时间:2019-06-19

本文共 1186 字,大约阅读时间需要 3 分钟。

石子合并(一)

时间限制:
1000 ms  |  内存限制:65535 KB
难度:
3
 
描述
    有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。
 
输入
有多组测试数据,输入到文件结束。
每组测试数据第一行有一个整数n,表示有n堆石子。
接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开
输出
输出总代价的最小值,占单独的一行
样例输入
31 2 3713 7 8 16 21 4 18
样例输出
9239
来源
上传者
#include
#include
#include
#include
using namespace std;int dp[210][210];int a[210],sum[210];int main(){ int n; while(cin >> n) { if(!n) { break; } sum[0] = 0; for(int i=1; i<=n; i++) { cin >> a[i]; sum[i] = sum[i-1] + a[i]; dp[i][i] = 0; } for(int l=2; l<=n; l++) { for(int i=1; i<=n-l+1; i++) { int j = i + l - 1; dp[i][j] = 1e9; 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][n] << endl; } return 0;}

 

转载于:https://www.cnblogs.com/l609929321/p/7262863.html

你可能感兴趣的文章
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
程序员怎么留住健康?
查看>>
(转)C# 把我所积累的类库全部分享给博友(附件已经上传)
查看>>
Silverlight5 无法切换输入法,无法输入中文的原因及解决初探
查看>>
游戏开发基础:方向键的组合,八方向实现
查看>>
黑书-DP-方块消除 ****
查看>>
MySQL 分区
查看>>
我的架构经验系列文章 - 后端架构 - 语言层面
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
读取手机硬件信息
查看>>
一致哈希
查看>>
The connection to adb is down, and a severe error has occured. 问题解决
查看>>
在Jenkins中配置运行远程shell命令
查看>>
代码杂记
查看>>