dp算法之有代价的最短路径
题目:有代价的最短路径
题目介绍:如下图所示,现在平面上有N个点,此时N=7,每个点可能和其他点相连,相连的线有一定权值,求出从0点到N-1点的消耗权值的最小值。
分析:用动态规划的思路来解决,每一点与其他点的消耗权值的最小值都储存在一个二维数组中,下一个点消耗的最小值可以根据前一个点来得出。如果两个点不相连,可以认为这两点的权值为无穷大。设一个二维数组初始化为无穷,再导入权值初始值,再用状态方程得出最小值储存在数组中。
状态方程:l[k][j] = min(l[k][j], l[k][i] + l[i][j])
我们可以得出0到N-1的最短路径表格:
距离 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
0 | 0 | 2 | 5 | 3 | 1 | 3 | 6 |
代码:
#include <iostream>
using namespace std;
int min(int a, int b);
int main()
{
int X = ;
int N = ;
int i, j, k;
int **l = new int *[N];
for (i = ; i<N; i++)
{
l[i] = new int[N];
}
for (i = ; i < N; i++)
{
for (j = ; j < N; j++)
{
l[i][j] = X;
}
}
l[][] = l[][] = ;
l[][] = l[][] = ;
l[][] = l[][] = ;
l[][] = l[][] = ;
l[][] = l[][] = ;
l[][] = l[][] = ;
l[][] = l[][] = ;
l[][] = l[][] = ;
for (k = ; k < N; k++)
{
for (j = ; j < N; j++)
{
for (i = ; i < N; i++)
{
l[k][j] = min(l[k][j], l[k][i] + l[i][j]);
}
}
}
for (i = ; i < N; i++)
{
cout << l[][i] << endl;
}
}
int min(int a, int b)
{
if (a > b)
{
return b;
}
else { return a; }
}
结果:
dp算法之有代价的最短路径的更多相关文章
- 0-1背包的动态规划算法,部分背包的贪心算法和DP算法------算法导论
一.问题描述 0-1背包问题,部分背包问题.分别实现0-1背包的DP算法,部分背包的贪心算法和DP算法. 二.算法原理 (1)0-1背包的DP算法 0-1背包问题:有n件物品和一个容量为W的背包.第i ...
- 最大子段和的DP算法设计及其效率测试
表情包形象取自番剧<猫咪日常> 那我也整一个 曾几何时,笔者是个对算法这个概念漠不关心的人,由衷地感觉它就是一种和奥数一样华而不实的存在,即便不使用任何算法的思想我一样能写出能跑的程序 直 ...
- 华为笔试——C++平安果dp算法
题目:平安果 题目介绍:给出一个m*n的格子,每个格子里有一定数量的平安果,现在要求从左上角顶点(1,1)出发,每次走一格并拿走那一格的所有平安果,且只能向下或向右前进,最终到达右下角顶点(m,n), ...
- Flyod 算法(两两之间的最短路径)
Flyod 算法(两两之间的最短路径)动态规划方法,通过相邻矩阵, 然后把最后的结果存在这么一个矩阵里面,(i,j), #include <iostream> #include <v ...
- dp算法之硬币找零问题
题目:硬币找零 题目介绍:现在有面值1.3.5元三种硬币无限个,问组成n元的硬币的最小数目? 分析:现在假设n=10,画出状态分布图: 硬币编号 硬币面值p 1 1 2 3 3 5 编号i/n总数j ...
- C++数字三角形问题与dp算法
题目:数字三角形 题目介绍:如图所示的数字三角形,要求从最上方顶点开始一步一步下到最底层,每一步必须下一层,求出所经过的数字的最大和. 输入:第一行值n,代表n行数值:后面的n行数据代表每一行的数字. ...
- DP问题练习1:数字三角最短路径问题
DP问题练习1:数字三角最短路径问题 问题描述 给定一个数字三角形,找到从顶部到底部的最小路径和.每一步可以移动到下面一行的相邻数字上. 样例: 比如,给出下列数字三角形: 2 3 4 6 5 7 4 ...
- dfs与dp算法之关系与经典入门例题
目录 声明 dfs与dp的关系 经典例题-数字三角形 - POJ 1163 题目 dfs思路 解题思路 具体代码 dp思路 解题思路 具体代码 声明 本文不介绍dfs.dp算法的基础思路,有想了解的可 ...
- 动态规划——DP算法(Dynamic Programing)
一.斐波那契数列(递归VS动态规划) 1.斐波那契数列——递归实现(python语言)——自顶向下 递归调用是非常耗费内存的,程序虽然简洁可是算法复杂度为O(2^n),当n很大时,程序运行很慢,甚至内 ...
随机推荐
- (第一章)改善JavaScript,编写高质量代码。
根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...
- virtualbox+vagrant学习-2(command cli)-22-vagrant validate命令
Validate 格式: vagrant validate [options] 该命令用于验证你的Vagrantfile文件 userdeMacBook-Pro:~ user$ vagrant val ...
- BurpSuite+SQLmap的一种另类扫描
过年之后就忙的团团转.三月开始可以轻松一些,抽空写写最近瞎折腾的东西,本文只是描述工具的一种使用方法,无技术含量.(PS:这种做法,网上也有很多教程,本文只为记录). 由于公司使用的电脑都是win10 ...
- H.264编码格式简单分析
H.264的重要性不再提了.本文主要记录一下H.264的编码格式.H.264官方文档:https://github.com/jiayayao/DataSheet/tree/master/encode- ...
- Linux下onvif客户端获取h265 IPC摄像头的RTSP地址
1. 设备搜索,去获取webserver 的地址 ,目的是在获取能力提供服务地址,demo:https://www.cnblogs.com/croxd/p/10683429.html 2. GetCa ...
- JavaWeb总结(八)
对象作用域 在Servlet里可以用一个名字绑定一个对象,并且在应用中传递和使用这个对象 作用域对象 属性操作方法 作用域范围说明 ServletContext(上下文) void setAttrib ...
- oracle rowid 研究
SQL> create table tab01(id integer,val varchar(4)); Table created. SQL> insert into tab01 valu ...
- Kubernetes学习之路(六)之创建K8S应用
一.Deployment的概念 K8S本身并不提供网络的功能,所以需要借助第三方网络插件进行部署K8S中的网络,以打通各个节点中容器的互通. POD,是K8S中的一个逻辑概念,K8S管理的是POD,一 ...
- SSIS 数据流的执行树和数据管道
数据流组件的设计愿景是快速处理海量的数据,为了实现该目标,SSIS数据源引擎需要创建执行树和数据管道这两个数据结构,而用户为了快速处理数据流,必须知道各个转换组件的阻塞性,充分利用流式处理流程,利用更 ...
- 按键精灵手机版多点找色,图片对比 by <剑行洪荒> 忠哥
代码: Do Dim ret1,ret2 Delay 500 ret1 = CmpColor(76,72, "153274", 0.9) ret2 = Cm ...