DP问题练习1:数字三角最短路径问题

问题描述

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

样例:

比如,给出下列数字三角形:

     2
3 4
6 5 7
4 1 8 3

从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。

思路

我们给每一个位置标上坐标
2 (0,0)
3 4 (1,0) (1,1)
6 5 7 ...
4 1 8 3 ...
我们用f(i,j)表示从(i,j)位置一直到三角形底部的最小路径和。
那么f(0,0) = min(f(1,0),f(1,1))+Value(0,0); Value(0,0)就是值2
f(1,0) = min(f(2,0),f(2,1))+Value(1,0);
...
1.推导出状态转移方程:
f(i,j) = min(f(i+1,j),f(i+1,j+1)) + Value(i,j)。
利用这个状态转移方程我们可以写出一个递归函数。
2.递归的边界确定:
对于f(i,j),当:
i == 三角形高度-1 的时候,直接返回Value(i,j)

代码:

(function(){
main();
})();
/**
* [三角问题最小路径和]
* @param {[Array]} triangleList [trianglelist]
* @return {[Number]} [length of minimumTotal]
*/
function minimumTotal(triangleList){
//这个DP问题的状态转移方程
//f(i,j) = min(f(i+1,j),f(i+1,j+1))+(i,j) f(i,j)表示当前步骤(i,j)走到最后,所对应的最小路径和
var triangleHeight = getTriangleHeight(triangleList); function calResult(i,j){
if(i == triangleHeight-1){
return triangleList[getIndex_i(i)+j];
}else{
var res1 = calResult(i+1,j);
var res2 = calResult(i+1,j+1);
return Math.min(res1,res2)+triangleList[getIndex_i(i)+j];
}
}
return calResult(0,0); }
/**
* 获取三角形有多少行
* @param {[Array]} triangleList [description]
* @return {[Number]} [description]
*/
function getTriangleHeight(triangleList){
var height = 0.5*(Math.sqrt(1+triangleList.length*8)-1);
console.assert(parseInt(height) == height,"输入的三角形数据数量有误");
return height;
}
/**
* 通过行数获取该行第一个元素在数组中的下标
* @param {[Number]} lineNo [行标,从0开始计]
* @return {[Number]} [数组下标]
*/
function getIndex_i(lineNo){
// if(lineNo == 0)
// return 0;
// return getIndex_i(lineNo-1)+lineNo;
//根据 f(n) = f(n-1)+n; f(0)=0 推到 f(n) = n(n+1)/2
return lineNo*(lineNo+1)/2;
} function main(){
var TEMP = [2,3,4,6,5,7,4,1,8,9];
console.log(minimumTotal(TEMP))
}

DP问题练习1:数字三角最短路径问题的更多相关文章

  1. 「单调队列优化DP」P2034 选择数字

    「单调队列优化DP」P2034 选择数字 题面描述: 给定一行n个非负整数a[1]..a[n].现在你可以选择其中若干个数,但不能有超过k个连续的数字被选择.你的任务是使得选出的数字的和最大. 输入格 ...

  2. Help Jimmy POJ - 1661 数字三角DP

    题意:中文 https://vjudge.net/problem/POJ-1661 题解:设两个dp数组,dpl[i]存 从第i块板左边到地上所花的最短时间,dpr[i]存右边的. 将所有板按高度排序 ...

  3. ACM/ICPC 之 DP进阶(51Nod-1371(填数字))

    原题链接:填数字 顺便推荐一下,偶然看到这个OJ,发现社区运营做得很赞,而且交互和编译环境都很赞(可以编译包括Python,Ruby,Js在内的脚本语言,也可以编译新标准的C/C++11,甚至包括Go ...

  4. 【OpenJudge9272】【DP】偶数个数字3

    偶数个数字3 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] 在所有的N位数中,有多少个数中有偶数个数字3? [输入] 一行给出数字N,N&l ...

  5. dp算法之有代价的最短路径

    题目:有代价的最短路径 题目介绍:如下图所示,现在平面上有N个点,此时N=7,每个点可能和其他点相连,相连的线有一定权值,求出从0点到N-1点的消耗权值的最小值. 分析:用动态规划的思路来解决,每一点 ...

  6. (数位DP)51NOD 1042 数字0-9的数量

    给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次.   输入 ...

  7. HDU1176:免费馅饼(dp,数字三角形的应用)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1176 这题就是数字三角行的变形,可惜对于我这个渣渣来说就是没发现,区别是他可以保持在三个点,他左边的点,右 ...

  8. 数字三角形 (DP入门)

    7 3     8 8     1     0 2     7     4     4  4     5     2     6     5 给出一个数字三角形.从三角形的顶部到底部有很多条不同的路径 ...

  9. HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)     ...

随机推荐

  1. fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text '2019-05-24 13:52:11' could not be parsed at index 10

    本地java类 import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; ...

  2. 使用 WebStorm alt+f2 快速打开浏览器测试的一点bug

    这个bug是涉及到中英文文件名的问题(不涉及到路径名): Case 1: 中文文件名 当打开alt+f2快捷方式打开含有中文名的html文件时,路径名直接变为localhost,所以找不到要打开的文件 ...

  3. docker 入门 命令

    docker 命令 docker images 镜像列表 docker ps 服务列表 docker 隐藏打包文件 .dockerignore .git node_modules npm-debug. ...

  4. 安装 Git 并连接 Github

    下载安装 Git, 下载地址:https://git-scm.com/download/win . 在命令行中输入 git 测试 Git 是否安装成功. 在桌面鼠标右击打开 Git Bash Here ...

  5. pytorch中的激励函数(详细版)

          初学神经网络和pytorch,这里参考大佬资料来总结一下有哪些激活函数和损失函数(pytorch表示)      首先pytorch初始化:   import torch import t ...

  6. 白盒测试笔记之:Junit 单元测试以及测试覆盖率

    单元测试: 单元测试是从代码层面验证代码的正确性. 一般考虑接口中的数据结构是否正确,变量的临界条件,如空字符串,空集合等. ​ Junit入门  参考: Junit 入门教程: https://ww ...

  7. 人工智能01 刺激响应agent

    刺激响应agent 不具有内部状态而仅对其所处环境的即刻刺激有所反应的机器称为刺激响应(SR)agent 感知和动作 一机器人可以感知出周围8个单元是否空缺.这些传感器输入用二进制变量s1,s2 ,s ...

  8. 基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计『转』

    本文讲述如何实现拥有酷炫背景视频的登录页面,浏览器窗口随意拉伸,背景视频及前景登录组件均能完美适配,背景视频可始终铺满窗口,前景组件始终居中,视频的内容始终得到最大限度的保留,可以得到最好的视觉效果. ...

  9. CF 1133C Balanced Team

    题目链接:http://codeforces.com/problemset/problem/1133/C 题目分析 (个人感受:我看错了题目,硬是写了近一个小时!) 这个题目要求一个最长的序列,使得这 ...

  10. Coins —— POJ-1742

    Time limit 3000 ms Memory limit 30000 kB Description People in Silverland use coins.They have coins ...