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和里面本身的某个东西冲突了,所以编译错了,后来改成 ...
随机推荐
- Active MQ Fileserver 远程代码执行 (CVE-2016-3088)
ActiveMQ漏洞( CVE-2016-3088)利用拿下root权限主机 1.扫描目标主机 MacPC:~ liuxin$ nmap -Pn -p8161 -sV 192.168.xx.xx -- ...
- 转:JAVA 的wait(), notify()与synchronized同步机制
原文地址:http://blog.csdn.net/zyplus/article/details/6672775 转自:https://www.cnblogs.com/x_wukong/p/40097 ...
- LeetCode 811 Subdomain Visit Count 解题报告
题目要求 A website domain like "discuss.leetcode.com" consists of various subdomains. At the t ...
- navicat连接oracle失败
正常是成功的,失败的话,就是oci.dll的问题 在这边下载: https://www.oracle.com/technetwork/topics/winsoft-085727.html 然后找到对应 ...
- UOJ244 短路 贪心
正解:贪心 解题报告: 传送门! 贪心真的都是些神仙题,,,以我的脑子可能是不存在自己想出解这种事情了QAQ 然后直接港这道题解法趴,,, 首先因为这个是对称的,所以显然的是可以画一条斜右上的对角线, ...
- project proposal写作框架
主要有八个因素: 背景(Your Background):对于proposal有意义的要点,如国家职业证书.技能.经验.能力和实习经历等. 大纲(Outline Proposal):描述你明确的感兴趣 ...
- ext.js的mvc
1.Ext.js的mvc开发模式 在ext.js4.0以后引入mvc开发模式,将js分成model-view-controller三层,使得大量js代码变得更加易于维护和重用,这就是ext.jsmvc ...
- CentOS SSH免密登陆
#环境说明客户机:Mac OS X服务器:CentOS 6.5客户端:OpenSSH,OS X及大多数Linux都内置了OpenSSH.’ssh -v’命令可以查看版本. #大致流程1.在客户机创建一 ...
- myeclipse项目导入到eclipse, HttpServletRequest报红现象
eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法 当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, Serv ...
- IDEA集成的 Thrift 插件进行 thrift 编译
IDEA集成的 Thrift 插件进行 thrift 编译 注意 1.thrift文件要放在source目录,才有compile选项 2.generator list的output path不用加包名 ...