UVa-116 Unidirectional TSP 单向旅行商
题目
https://vjudge.net/problem/uva-116
分析
设d[i][j]为从(i,j)到最后一列的最小开销,则d[i][j]=a[i][j]+max(d[i+1][j+1],d[i-1][j+1])
参考数字三角形,用逆推的方法,先确定最后一列d[i][n-1]=a[i][n-1],再确定n-2列,此时d[i][n-2] = a[i][n-2]+min(d[i][n-1],d[i-1][n-1],d[i+1][n-1])
最终推出全部的d[i][j]后,第一列最小的d就是答案.
另外要求打印路径,因此建立一个数组next1[i][j],保存结点i,j之后的结点.
在逆推的时候,如果d[rows[k]][j+1]+a[i][j] < d[i][j] 就更新next1[i][j]=rows[k]
AC代码
#include "bits/stdc++.h"
using namespace std;
#define inf 0x3f3f3f3f
int main(int argc, char const *argv[])
{
ios::sync_with_stdio(false);
int a[150][150], d[150][150], next1[150][150];
int ans = inf, first = 0, m, n, i, j, k;
while (cin >> m && m != - 1) {
cin >> n;
ans = inf;
//d[i][j]表示从i, j开始走可以经过的最小整数和
//因此可以知道最后一列d[i][n-1] = a[i][n-1]
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin >> a[i][j];
for (i = 0; i < m; i++)
d[i][n - 1] = a[i][n - 1]; //初始化最后一列
for (j = n - 2; j >= 0; j--) {
for (i = 0; i < m; i++) {
int rows[3] = {i, i - 1, i + 1};
if (i == 0) rows[1] = m - 1; //第一行与最后一行相邻
if (i == m - 1) rows[2] = 0;
sort(rows, rows + 3);
d[i][j] = inf;
for (k = 0; k < 3; k++) {
int v = a[i][j] + d[rows[k]][j + 1];
if(v < d[i][j]){
d[i][j] = v;//更新最短路
next1[i][j] = rows[k];//记录路径,只记录行,因为列是递增的
}
}
if(j ==0 && d[i][j] < ans){
ans = d[i][j];
first = i;
}
}
}
//因为上面是从n - 2列开始, 所以只有一列是要单独处理
if(n==1){
for(i=0;i<m;i++){
if(ans > a[i][0]){
ans = a[i][0];
first = i;
}
}
}
cout << first + 1;
for(int i=next1[first][0], j=1; j<n; i = next1[i][j],j++){
cout << ' ' << i+1;
}
cout << endl << ans << endl;
}
return 0;
}
UVa-116 Unidirectional TSP 单向旅行商的更多相关文章
- uva 116 Unidirectional TSP (DP)
uva 116 Unidirectional TSP Background Problems that require minimum paths through some domain appear ...
- uva 116 Unidirectional TSP【号码塔+打印路径】
主题: uva 116 Unidirectional TSP 意甲冠军:给定一个矩阵,当前格儿童值三个方向回格最小值和当前的和,就第一列的最小值并打印路径(同样则去字典序最小的). 分析:刚開始想错了 ...
- UVA 116 Unidirectional TSP(dp + 数塔问题)
Unidirectional TSP Background Problems that require minimum paths through some domain appear in ma ...
- UVA 116 Unidirectional TSP(DP最短路字典序)
Description Unidirectional TSP Background Problems that require minimum paths through some domai ...
- UVA - 116 Unidirectional TSP (单向TSP)(dp---多段图的最短路)
题意:给一个m行n列(m<=10, n<=100)的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列.要求经过的整数之和最小.第一行的上一行是最后一行,最后一 ...
- UVa - 116 - Unidirectional TSP
Background Problems that require minimum paths through some domain appear in many different areas of ...
- UVA 116 Unidirectional TSP 经典dp题
题意:找最短路,知道三种行走方式,给出图,求出一条从左边到右边的最短路,且字典序最小. 用dp记忆化搜索的思想来考虑是思路很清晰的,但是困难在如何求出字典序最小的路. 因为左边到右边的字典序最小就必须 ...
- UVa 116 Unidirectional TSP (DP)
该题是<算法竞赛入门经典(第二版)>的一道例题,难度不算大.我先在没看题解的情况下自己做了一遍,虽然最终通过了,思路与书上的也一样.但比书上的代码复杂了很多,可见自己对问题的处理还是有所欠 ...
- UVA - 116 Unidirectional TSP 多段图的最短路 dp
题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...
随机推荐
- delphi传递变量给fastreport
delphi传递变量给fastreport 1.打开frReport报表设计.2.打开file->data dictionary加变量.这里比如加title,bm,zbr,gj,zrs3.在 ...
- 20165317 Linux安装及学习
Linux安装及学习 一.Linux的安装 我通过virtualbox和ubuntu官网下载了virtualbox5.2.6和ubuntu17.04版本. 在操作过程中,我基本是按照老师的步骤进行的, ...
- mysql-5.7免安装版本设置
mysql-5.7.22 免安装版本设置(Windows7) 一.在Mysql官网下载Mysql-5.7.22的ZIP文件 下载链接为:https://dev.mysql.com/downloads ...
- python作用域问题
今天出了个低级的错误,最后确定是作用域问题,特回顾知识点如下: 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域. Python的作 ...
- 【pyqtgraph绘图】Qt速成课程
解读官方API-Qt速成课程 参考:http://www.pyqtgraph.org/documentation/qtcrashcourse.html Qt速成课程 PyQtGraph广泛使用Qt来生 ...
- ef codefirst 模型字段类型与sqlserver表字段类型对应概要
1.sqlserver中nvarchar(50),对应EF中: [MaxLength(, ErrorMessage = "最大长度为{1}")] public string Nam ...
- 第5章 实现windows程序的数据绑定
1:连接式: command 对象负责对数据库的执行命令 DataReader 对象负责从数据源中读取数据 connection 对象负责链接数据库 断开式: 数据集的Dataset存放在独立的数据源 ...
- python-面向对象-07_继承
继承 目标 单继承 多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不 ...
- 原生js获取子元素、给元素增加div
//鼠标移入移出动画 解决页面闪屏问题 window.onload = function () { var el = document.createElement('div'); el.classNa ...
- mysql show prifile基本详解
show profile默认情况下,参数处于关闭状态,并保存最近15次的运行结果查看profile是否开启 show variables like '%profi%';开启profile记录功能 se ...