题目

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 单向旅行商的更多相关文章

  1. uva 116 Unidirectional TSP (DP)

    uva 116 Unidirectional TSP Background Problems that require minimum paths through some domain appear ...

  2. uva 116 Unidirectional TSP【号码塔+打印路径】

    主题: uva 116 Unidirectional TSP 意甲冠军:给定一个矩阵,当前格儿童值三个方向回格最小值和当前的和,就第一列的最小值并打印路径(同样则去字典序最小的). 分析:刚開始想错了 ...

  3. UVA 116 Unidirectional TSP(dp + 数塔问题)

     Unidirectional TSP  Background Problems that require minimum paths through some domain appear in ma ...

  4. UVA 116 Unidirectional TSP(DP最短路字典序)

    Description    Unidirectional TSP  Background Problems that require minimum paths through some domai ...

  5. UVA - 116 Unidirectional TSP (单向TSP)(dp---多段图的最短路)

    题意:给一个m行n列(m<=10, n<=100)的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列.要求经过的整数之和最小.第一行的上一行是最后一行,最后一 ...

  6. UVa - 116 - Unidirectional TSP

    Background Problems that require minimum paths through some domain appear in many different areas of ...

  7. UVA 116 Unidirectional TSP 经典dp题

    题意:找最短路,知道三种行走方式,给出图,求出一条从左边到右边的最短路,且字典序最小. 用dp记忆化搜索的思想来考虑是思路很清晰的,但是困难在如何求出字典序最小的路. 因为左边到右边的字典序最小就必须 ...

  8. UVa 116 Unidirectional TSP (DP)

    该题是<算法竞赛入门经典(第二版)>的一道例题,难度不算大.我先在没看题解的情况下自己做了一遍,虽然最终通过了,思路与书上的也一样.但比书上的代码复杂了很多,可见自己对问题的处理还是有所欠 ...

  9. UVA - 116 Unidirectional TSP 多段图的最短路 dp

    题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...

随机推荐

  1. [报错]ios开发 failed to read file attributes for

    下载第三方demo,运行报错:   failed to read file attributes for https://stackoverflow.com/questions/46301270/fa ...

  2. ORA-00054:resource busy and acquire with nowait specified解决方法

    1.用dba权限的用户查看数据库都有哪些锁 SELECT T2.USERNAME,T2.SID,T2.SERIAL#,T2.LOGON_TIME        FROM V$LOCKED_OBJECT ...

  3. Beanstalkd 基本概念和使用

    1:什么是 Beanstalkd ? Beanstalkd 一个高性能.轻量级的分布式内存队列系统 简单来说,就是一个队列,相比于 数据库/redis 队列相比. 更专业.能完成的功能更多.就这么理解 ...

  4. pandas基础

    1.相关库导入 2.创建数据结构 pandas 有两个重要的数据结构: Series 和 DataFrame 创建Series数组,代表一行或一列 创建DataFrame ,代表二维数组 第一种方式: ...

  5. centos所有版本下载源

    http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso http://mirrors.yun-idc.com/ ...

  6. java JDBC (六) org.apache.commons.dbutils 增删改

    dbutils是apache封装了JDBC的工具类,比mysql-connector更方便些 下载地址:http://commons.apache.org/proper/commons-dbutils ...

  7. java 线程(五)线程安全 Lock接口

    package cn.sasa.demo3; import java.util.concurrent.ExecutionException; public class ThreadDemo { pub ...

  8. Hibernate的一个小应用

    hibernate 第一步,导入hiberante需要用到的jar包,因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包 不要忘记还有 ...

  9. 【托业】【新托业TOEIC新题型真题】学习笔记8-题库五->P7

    ———————————————————单词———————————————————— minister 部长 construction contractor 施工方 commence 开始:着手 bac ...

  10. hibernate 主键生成方式

    1)assigned主键由外部程序负责生成,无需Hibernate参与. 2)hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3)seqhilo与hilo 类 ...