交通网最短路径长 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份订单,他 ...
随机推荐
- Js中各种类型的变量在if条件中是true还是false
如果操作数是一个对象,返回true如果操作数是一个空字符串,返回false如果操作数是一个非空字符串,返回true如果操作数是数值0,返回false如果操作数是任意非0数值(包括Infinity),返 ...
- Docker入门——理解Docker的核心概念
1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...
- 分布式配置中心(Native - Config)
本章只讲 Spring Cloud 本地配置方式,可以很方便的高可用集群,且存在良好通讯,不用担心云服务器与内网之间GIT带来的不便,GIT(网上GIT教程一搜一大把了….) - 快速开始 Sprin ...
- 11. RobotFramework内置库-Collections
Collections库是RobotFramework用来处理列表和字典的库,详细可参见官方介绍. 官方地址:http://robotframework.org/robotframework/late ...
- Oracle归档日志所在目录时间不对&&Oracle集群日志时间显示错误
Oracle归档日志所在目录时间不对&&Oracle集群日志时间显示错误 前言 这个问题在18年的时候遇到了,基本不注意并且集群或者数据库运行正常是很难注意到的. 忘记当时怎么发现的了 ...
- 【区间DP】低价回文
[区间DP]低价回文 标签(空格分隔): 区间DP 回文词 [题目描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身上安装了一个电子身份标签,当奶牛通过扫描器的时 ...
- CentOS 7 的防火墙开启2
在虚拟机 CentOS 7 上装了 Nginx,结果发现另一台电脑无法访问其默认页面,通过 telnet 192.168.1.88 80 监听发现是 http 80 端口被 CentOS 7 的防火墙 ...
- kafka的认识、安装与配置
认识Kafka 花费越少的精力在数据移动上,就能越专注于核心业务 --- <Kafka:The Definitive Guide> 认识 Kafka 之前,先了解一下发布与订阅消息系统:消 ...
- BERT源码分析及使用方法
本文原作者:梁源 BERT (Bidirectional Encoder Representations from Transformers) 官方代码库 包含了BERT的实现代码与使用BERT进行文 ...
- Java入门系列之重写
前言 关于所有Java系列文章面向有一定基础的童鞋,所写每一篇希望有一定含金量,有些内容可能会从Java整个语法全局考虑穿插后续要讲解的内容以成系统,若不理解,请看完后再学习.上一节我们讲解完了fin ...