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

转载时必须以链接形式注明原始出处及本声明。

最小代价树(动态规划)相关推荐

  1. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Descr ...

  2. SPH算法(求最小代价树)

    一.sph算法简介 1.最小代价树算法 SPH算法也叫做MPH( minimum path heuristic)算法, 用于构造时延约束最算法小代价组播树. 该算法中每 个目的结点通过与当前组播树有最 ...

  3. 动态规划——钢管切割最小代价问题

    一.问题描述: 设有一根长度为L的钢条,在钢条上标有n个位置点(p1,p2,......,pn).现在需要按钢条上标注的位置将钢条切割为n+1段,每次切割的代价为所切的钢条长度,试求在所有的切割方案中 ...

  4. 【动态规划】最小代价问题

    最小代价问题 Description 设有一个n×m(小于100)的方格(如图所示),在方格中去掉某些点,方格中的数字代表距离(为小于100的数,如果为0表示去掉的点),试找出一条从A(左上角)到B( ...

  5. 【模板】最小割树(Gomory-Hu Tree)

    传送门 Description 给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不 ...

  6. [BZOJ4883][Lydsy1705月赛]棋盘上的守卫[最小基环树森林]

    题意 有一大小为 \(n*m\) 的棋盘,要在一些位置放置一些守卫,每个守卫只能保护当前行列之一,同时在每个格子放置守卫有一个代价 \(w\) ,问要使得所有格子都能够被保护,需要最少多少的代价. \ ...

  7. 【bzoj4883】[Lydsy2017年5月月赛]棋盘上的守卫 最小环套树森林

    题目描述 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个 ...

  8. SSL 1460——最小代价问题

    Description 设有一个n×m(小于100)的方格(如图所示),在方格中去掉某些点,方格中的数字代表距离(为小于100的数,如果为0表示去掉的点),试找出一条从A(左上角)到B(右下角)的路径 ...

  9. 二叉搜索树-创建最小高度树(递归)

    题意: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 这里回忆一下二叉搜索树的概念: 对于树中的所有子树都有,左子树上的值都小于根节点的值,右子树上的值 ...

最新文章

  1. flask-WTF和sqlalchemy结合使用并实现管理员表和用户表之间的关联关系(结合前端页面实现管理员和用户选择登录)
  2. 千千万万的IT开发工程师路在何方?
  3. 人物角色群体攻击判定二(叉乘来判断敌人的位置)
  4. 解析统计文本文件中的字符数、单词数、行数。
  5. GO语言练习:第二个工程--模拟音乐播放器
  6. sql 临时表_深度分析 | JDBC与MySQL临时表空间的分析
  7. ***检测(IDS)存在的问题及发展趋势
  8. cogs 1111. 最短路
  9. 设计模式之模版方法模式
  10. 计算机系统非正版,电脑安装正版系统和盗版系统的区别
  11. 阿里java注释规范_阿里巴巴Java开发手册-注释规约
  12. 为什么RGBW排列比RGB排列分辨率更高
  13. sp485ee 芯片调试,RE DE 一直上拉故障
  14. html怎么把图片左移_css如何向左移动图片
  15. c4d-学习笔记-4-建模
  16. 【SequoiaDB巨杉数据库】函数操作 $subtract
  17. Unity3D学习记录 (跑酷小游戏完结)
  18. ASCII栅格的显示
  19. 计算机软件版权注册,计算机软件版权注册费是多少
  20. 计算机在生物教学方面的应用,计算机在生物教学中的应用

热门文章

  1. 2023计算机毕业设计SSM最新选题之java乡村疫情防控管理系统37804
  2. 不用任何软件实现ADSL自动拨号
  3. android虚拟wifi设置,win7系统建立虚拟wifi方法支持WP7系统/安卓系统/笔记本
  4. 51单片机 使用IIC转接板驱动LCD1602
  5. 在WORD文档里面如何在最底部加入(第几页,共几页)
  6. 淘宝教育视频加速观看
  7. Linq-20220817更新
  8. BIM机电插件分分钟解决【管道附件】【风管附件】【电气配件】
  9. 服务器c盘装完系统70多g,新安装的Win10系统C盘居然用了30多个G怎么回事
  10. 常用国外系列陆地卫星介绍 中高分辨率