最小代价树(动态规划)
Description
以下方法称为最小代价的字母树:给定一正整数序列,例如:4,1,2,3,在不改变数的位置的条件下把它们相加,并且用括号来标记每一次加法所得到的和。
例如:((4+1)+ (2+3))=((5)+(5))=10。除去原数不4,1,2,3之外,其余都为中间结果,如5,5,10,将中间结果相加,得到:5+5+10=20,那么数20称为此数列的一个代价,若得到另一种算法:(4+((1+2)+3))=(4+((3)+3))=(4+(6))=10,数列的另一个代价为:3+6+10=19。若给出N个数,可加N-1对括号,求出此数列的最小代价。
注:结果范围不超出longint.
Input
第一行为数N(1≤N≤200),第二行为N个正整数,整数之间用空格隔开。
Output
输出仅一行,即为最少代价值。
Sample Input
4 4 1 2 3
Sample Output
19
解题思路:
f[i,j]表示把第i个数和第j个数合并的最优值,状态转移方程为:
f[i,j]=min{f[i,j],f[i,k]+f[k+1,j]+s[j]-s[i-1]}
(n>=i>=1,i<=k
f[1,n]即为所求。
时间复杂度:O(n^3)
程序:
const
maxn=200;
var
f,sum:array[0..200,0..200]of longint;
a:array[0..200]of longint;
n,i,j,k,l:longint;
function min(a,b:longint):longint;
begin
if a
end;
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n do
begin
f[i,i]:=0;
sum[i,i]:=a[i];
for j:=i+1 to n do
sum[i,j]:=sum[i,j-1]+a[j];
end;
for l:=2 to n do
for i:=1 to n-l+1 do
begin
j:=l+i-1;
f[i,j]:=maxlongint;
for k:=i to j-1 do
f[i,j]:=min(f[i,j],f[i,k]+f[k+1,j]+sum[i,j]);
end;
writeln(f[1,n]);
end.
版权属于: Chris
原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102vjrp.html
转载时必须以链接形式注明原始出处及本声明。
最小代价树(动态规划)相关推荐
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Descr ...
- SPH算法(求最小代价树)
一.sph算法简介 1.最小代价树算法 SPH算法也叫做MPH( minimum path heuristic)算法, 用于构造时延约束最算法小代价组播树. 该算法中每 个目的结点通过与当前组播树有最 ...
- 动态规划——钢管切割最小代价问题
一.问题描述: 设有一根长度为L的钢条,在钢条上标有n个位置点(p1,p2,......,pn).现在需要按钢条上标注的位置将钢条切割为n+1段,每次切割的代价为所切的钢条长度,试求在所有的切割方案中 ...
- 【动态规划】最小代价问题
最小代价问题 Description 设有一个n×m(小于100)的方格(如图所示),在方格中去掉某些点,方格中的数字代表距离(为小于100的数,如果为0表示去掉的点),试找出一条从A(左上角)到B( ...
- 【模板】最小割树(Gomory-Hu Tree)
传送门 Description 给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不 ...
- [BZOJ4883][Lydsy1705月赛]棋盘上的守卫[最小基环树森林]
题意 有一大小为 \(n*m\) 的棋盘,要在一些位置放置一些守卫,每个守卫只能保护当前行列之一,同时在每个格子放置守卫有一个代价 \(w\) ,问要使得所有格子都能够被保护,需要最少多少的代价. \ ...
- 【bzoj4883】[Lydsy2017年5月月赛]棋盘上的守卫 最小环套树森林
题目描述 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个 ...
- SSL 1460——最小代价问题
Description 设有一个n×m(小于100)的方格(如图所示),在方格中去掉某些点,方格中的数字代表距离(为小于100的数,如果为0表示去掉的点),试找出一条从A(左上角)到B(右下角)的路径 ...
- 二叉搜索树-创建最小高度树(递归)
题意: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 这里回忆一下二叉搜索树的概念: 对于树中的所有子树都有,左子树上的值都小于根节点的值,右子树上的值 ...
最新文章
- flask-WTF和sqlalchemy结合使用并实现管理员表和用户表之间的关联关系(结合前端页面实现管理员和用户选择登录)
- 千千万万的IT开发工程师路在何方?
- 人物角色群体攻击判定二(叉乘来判断敌人的位置)
- 解析统计文本文件中的字符数、单词数、行数。
- GO语言练习:第二个工程--模拟音乐播放器
- sql 临时表_深度分析 | JDBC与MySQL临时表空间的分析
- ***检测(IDS)存在的问题及发展趋势
- cogs 1111. 最短路
- 设计模式之模版方法模式
- 计算机系统非正版,电脑安装正版系统和盗版系统的区别
- 阿里java注释规范_阿里巴巴Java开发手册-注释规约
- 为什么RGBW排列比RGB排列分辨率更高
- sp485ee 芯片调试,RE DE 一直上拉故障
- html怎么把图片左移_css如何向左移动图片
- c4d-学习笔记-4-建模
- 【SequoiaDB巨杉数据库】函数操作 $subtract
- Unity3D学习记录 (跑酷小游戏完结)
- ASCII栅格的显示
- 计算机软件版权注册,计算机软件版权注册费是多少
- 计算机在生物教学方面的应用,计算机在生物教学中的应用