[Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/
例如:((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.
4
4 1 2 3
|
19 |
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 #define min(a,b) a<b?a:b 5 #define inf 0x3f3f3f3f 6 7 int sum[201], dp[201][201]; //dp[i][j]表示区间[i,j]的最小代价 8 int main() 9 { 10 int n, i, j, k, r, x; 11 cin >> n; 12 memset(dp, inf, sizeof(dp)); 13 for (i = 1; i <= n; i++){ 14 cin >> x; 15 sum[i] = sum[i - 1] + x; 16 dp[i][i] = 0; 17 } 18 for (r = 0; r < n; r++){ 19 for (i = 1; i <= n - r; i++){ 20 j = i + r; 21 for (k = i; k < j; k++){ 22 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + sum[j] - sum[i - 1]); 23 } 24 } 25 } 26 cout << dp[1][n] << endl;; 27 return 0; 28 }
View Code
用类似的dp方法可以解决[Swust OJ 574]RentBoat [Swust oj 419]括号配对 [nyoj 37]回文字符串
转载于:https://www.cnblogs.com/zyxStar/p/4585591.html
[Swust OJ 404]--最小代价树(动态规划)相关推荐
- 最小代价树(动态规划)
Description 以下方法称为最小代价的字母树:给定一正整数序列,例如:4,1,2,3,在不改变数的位置的条件下把它们相加,并且用括号来标记每一次加法所得到的和. 例如:((4+1)+ (2+ ...
- 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(右下角)的路径 ...
- 二叉搜索树-创建最小高度树(递归)
题意: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 这里回忆一下二叉搜索树的概念: 对于树中的所有子树都有,左子树上的值都小于根节点的值,右子树上的值 ...
最新文章
- matlab fsolve()函数的使用。
- python爬取内容乱码_【提问】PYTHON 爬取下来的中文数据显示乱码
- 使用graphite和grafana进行应用程序监控
- 「单点登录与权限管理」系列概述
- 树的知识点总结-数据结构
- axios_的配置对象详细说明---axios工作笔记007
- java 缓冲流 刷新_java – 缓冲和刷新Apache Beam流数据
- C语言中的static
- 牛客网-华为-2020届校园招聘上机考试-软件类机考-1
- Java中hashCode()与 equals()
- 最小二乘法拟合空间直线的原理及实现
- 空气质量等级c语言编程,编程小白如何快速处理空气质量数据
- HTML学生个人网站作业设计:动漫网站设计——梦幻西游(15页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- activiti踩坑2-camunda-modeler设计器与activiti7不兼容
- Spring Spring-data-redis 实现的消息队列
- 计算机网络 理论复习概括
- 下一代存储技术面临市场窗口期?
- 服务器u用固态硬盘,Bluehost SSD固态硬盘服务器性能评测
- 今日晚间互联网科技新闻
- 牙膏不只可刷牙——32不寻常用途!!
热门文章
- Announcing the Updated NGINX and NGINX Plus Plug‑In for New Relic (Version 2)
- ES6新增的let与const
- 工资高低由什么决定?(面试时如何谈工资?工作中怎样做才能不断涨工资?)...
- ES6数组的解构赋值( 中)
- 运营商认为虚拟化也难快速降低企业OPEX
- springcloud基于ribbon的canary路由方案
- 2016弱校联萌十一专场10.2
- PostgreSQL中的数据库实例、模式、用户(角色)、表空间
- Javascript导航菜单13则
- 不使用第三个变量,实现交换两个变量的值