交通网最短路径长 dp c++
//
// Created by Arc on 2020/4/26.
// /*
* 城市交通线路,单向通行,道路之间可能有不通,每条连同的路之间都有相应的费用
* 求从起点到终点的最小费用
*
* 需要一个a[n][n]数组存放每条路的费用,不连同就为0(给不连同加一个特判吧)
* f[n]表示点i到终点的最小费用,初始值都设为1000000(求最小费用,那你肯定要找个最大值啊)
* c[i]存放的是它的下一个的下标(画重点,这种方法真的很常见)
*/ #include <bits/stdc++.h>
using namespace std;
int main(){
long long f[],c[],a[][];//底下所有的下标都是从1开始的!!!!attention please!
int n;//总数
cin>>n;
memset(a,, sizeof(a));
memset(c,,sizeof(c));
for (int i = ; i <= n; ++i) {//下标是从1开始的所以是<=n
for (int j = ; j <= n; ++j) {
cin >> a[i][j]; }
}
for (int k = ; k < n; ++k) {
f[k]=; } //这里是算法的主体:逆推
f[n]=;
/*
* 写的时候是从n-1开始的,然后挨个往后比较
*(某dl说有点像冒泡排序bubblesort,好像确实有点哈哈哈哈)
* 就比如 1 2 3 4 5 就是从4开始往后跟5比
* 然后3开始跟4,5比
* 这里我把3称为固定点,4和5就是跳跃点(方便说明起见,完全杜撰的!)
*/
for (int i = n-; i >= ; i--) {//写的时候是从n-1开始的,然后挨个往后比较
for (int j = i+; j <= n; ++j) {//<=n
/*解释一下底下这行:
* a[i][j]>0 就是刚刚说的那个特判嘛,判断有没有相连
* f[j]!=1000000 f[j]是正在比较的那一个跳跃点,它要是为1000000那说明它根本不能到终点啊
* f[i]>a[i][j]+f[j] 一开始肯定成立,因为f[i]初始为1000000,到后来的时候,如果它大,那就是要改了呗
* f[i]=a[i][j]+f[j]; 更该成比较小的值
* c[i]=j;把这个位置记录下来
*
* 所以要赋值,需要满足的条件有:
* 1. i,j两点可以通
* 2. j能连接终点
* 3. 固定点的f比原来那个要小
*/
if((a[i][j]>) && (f[j]!=) && (f[i]>a[i][j]+f[j]) ){
f[i]=a[i][j]+f[j];
c[i]=j;
} // if(i==1 && j==n){
// cout<<"minlong="<<f[1]<<endl;//max
//} } }
//输出
cout<<"minlong="<<f[]<<endl;//max
int x=;
while(x!=){//注意这个条件,x为0的时候就不需要输出了
cout<<x<<" ";
x = c[x]; } return ; }
给一点点样例
Print in:
10
0 0 Print out:
minlong=19
1 3 5 8 10
说一下小白在这个代码中的一点点有点尴尬的错误:括号匹配问题.有时换编译器(编辑器)换多了就容易混:它有没有自动补全来着??中括号还好,大括号就会出现一堆bug,因为中括号小括号它自动补全了以后再往上码它也只是跳过它,但是大括号...码一个是一个!
最后一句:我原来这么长时间没有写题解了哈哈哈哈,抓住四月的小尾巴干起来!
交通网最短路径长 dp c++的更多相关文章
- hdu1428 记忆化搜索(BFS预处理最短路径和+DP+DFS)
题意:有一块 n * n 大小的方形区域,要从左上角 (1,1)走到右下角(n,n),每个格子都有通过所需的时间,并且每次所走的下一格到终点的最短时间必须比当前格子走到重点的最短时间短,问一共有多少种 ...
- POJ 3311---Hie with the Pie(状压DP)
题目链接 Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as ...
- dp培训完结(8.9)
概率与期望dp 期望: 为什么下面的式子成立? 若x可以取1,2,3,则x+c可以取1+c,2+c,3+c..........x*c可以取1*c,2*c,3*c why? 举个例子(E(x+y)=E( ...
- hdu1171(DP求两份物品的价值相差最小)
题目信息: 给出一些物品的价值和个数.分成两份,是这两份的价值相差最小(DP方法) http://acm.hdu.edu.cn/showproblem.php? pid=1171 AC代码: /** ...
- scauoj 18025 小明的密码 数位DP
18025 小明的密码 时间限制:4000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description 小明的密码由N(1<=N& ...
- bzoj1597[Usaco2008 Mar]土地购买 斜率优化dp
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5524 Solved: 2074[Submit] ...
- TZOJ 1937 Hie with the Pie(floyd+状压dp)
描述 The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfo ...
- 求最短路径的三种算法: Ford, Dijkstra和Floyd
Bellman-Ford算法 Bellman-Ford是一种容易理解的单源最短路径算法, Bellman-Ford算法需要两个数组进行辅助: dis[i]: 存储顶点i到源点已知最短路径 path[i ...
- 2800 送外卖[状态压缩dp]
2800 送外卖 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 有一个送外卖的,他手上有n份订单,他 ...
随机推荐
- Centos 6.4 安装KSnapshot 和gimp截图工具
一. # wget http://www.ibiblio.org/pub/Linux/X11/xutils/ksnapshot-0.2.7.tar.gz # tar -zxvf ksnapshot-0 ...
- 运用设计模式告别项目中大量臃肿的if else
前言 以前写过的一个老项目中,有这样一个业务场景,比喻:一个外卖系统需要接入多家餐馆,在外卖系统中返回每个餐馆的菜单列表 ,每个餐馆的菜单价格都需要不同的算法计算. 代码中使用了大量的if else嵌 ...
- 别逃避,是时候来给JVM一记重锤了
今天是猿灯塔“365天原创计划”第2天. 今天讲: 为什么写这个主题呢? 之前看到不少同学在讨论, 今天呢火星哥抽出点时间来帮大家整理一下关于JVM的一些知识点 一.JVM是什 ...
- MySQL Error (Always Continue)
MySQL Error (Always Continue) 其实大部分error在网上都有对应的解决办法,尤其是对Mysql这种使用范围很广的技术.自己就不为每个error单独发布博客了,仅在这里 ...
- LoadLibraryA与GetProcAddress介绍
0x00 函数原型 HMODULE LoadLibraryA( LPCTSTR lpLibFileName//模块的的的名字 ) FARPROC GetProcAddress( HMODULE ...
- Dubbo 高危漏洞!原来都是反序列化惹得祸
前言 这周收到外部合作同事推送的一篇文章,[漏洞通告]Apache Dubbo Provider默认反序列化远程代码执行漏洞(CVE-2020-1948)通告. 按照文章披露的漏洞影响范围,可以说是当 ...
- 大型Java进阶专题(七) 设计模式之委派模式与策略模式
前言 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...
- Python比较操作符、变量赋值、对象拷贝
Python比较操作符.变量赋值.对象拷贝 目录 Python比较操作符.变量赋值.对象拷贝 1. 比较操作符 == 和 is 1.1 区别 1.2 实例 2. 变量及其赋值 2.1 概念和逻辑关系 ...
- meta viewport相关
<!DOCTYPE html> H5标准声明,使用 HTML5 doctype,不区分大小写 <head lang=”en”> 标准的 lang 属性写法 <meta c ...
- python中os模块用法大全
os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os.chdir(dirname):改变工作目录到dirname os.path.r ...