这题的状态很明显。

转移方程就是

d(i,j)=min(d(i+1,j+1),d(i,j+1),d(i-1,j+1)) //注意边界

我用了一个next数组方便打印结果,但是一直编译错误,原来是不能用next命名数组,会和std::next冲突.

AC代码

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100+5;
const long long INF=(1<<30);
int nexter[10][maxn],a[10][maxn];
long long dp[10][maxn];
int n,m;
int main(){
    while(scanf("%d%d",&n,&m)==2){
        for(int i=0;i<n;++i)
            for(int j=0;j<m;++j)
            scanf("%d",&a[i][j]);
        //初始化边界
        for(int i=0;i<n;++i)
            dp[i][m-1]=a[i][m-1];
        for(int j=m-2;j>=0;--j) //逆推
            for(int i=0;i<n;++i){
            int row[3]={i,i-1,i+1};
            if(i==0) row[1]=n-1;
            if(i==n-1) row[2]=0;
            sort(row,row+3);  //字典序最小
            dp[i][j]=INF;
            for(int k=0;k<3;++k){
                long long w=a[i][j]+dp[row[k]][j+1];
                if(w<dp[i][j]) {
                    dp[i][j]=w;
                    nexter[i][j]=row[k];
                }
            }
        }
        long long ans=INF*100;
        int first;
        for(int i=0;i<n;++i){
            if(dp[i][0]<ans){
                ans=dp[i][0];
                first=i;
            }
        }
        printf("%d",first+1);
        for(int i=nexter[first][0],j=1;j<m;i=nexter[i][j],++j){
            printf(" %d",i+1);
        }
        printf("\n%lld\n",ans);
    }
    return 0;
}

如有不当之处欢迎指出!

uva 116 单向TSP的更多相关文章

  1. UVa 116 单向TSP(多段图最短路)

    https://cn.vjudge.net/problem/UVA-116 题意:给出m行n列的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列,要求经过的整数之和最小. ...

  2. uva 116 Unidirectional TSP (DP)

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

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

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

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

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

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

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

  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最短路字典序)

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

  8. UVa 116: Undirectional TSP

    简单动态规划题.用取模实现第一行与最后一行连续,注意取字典序即可. 我的解题代码如下: #include <iostream> #include <cstdio> #inclu ...

  9. UVA 116 Unidirectional TSP 经典dp题

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

随机推荐

  1. scrapy_随机user-agent

    什么是user-agent? 用户代理,服务器识别用户的操作系统,浏览器类型和渲染引擎,不同浏览器的user-agent是不同的 如何随机更改user-agent? 1. 在setting中添加use ...

  2. Python初识-day1

    1.第一个python程序(在pycharm中运行的,感觉还不错) 注释: 当行注释:#被注释内容 多行注释:'''  被注释内容 ''' 2.变量 (1) 自己理解的定义(仅供参考): 为了存储数据 ...

  3. DOM4J使用简介

    Dom4j 使用简介 作者:冰云 icecloud(AT)sina.com 时间:2003.12.15   版权声明: 本文由冰云完成,首发于CSDN,未经许可,不得使用于任何商业用途. 文中代码部分 ...

  4. PHP获取字符串编码与转码

    (⊙o⊙)-编辑器保存的是utf8的文档取出来的字符串是gbk编码?问题很多,字符串转换为utf8的话在浏览器输出乱码 $e=mb_detect_encoding($d,array('GB2312', ...

  5. 关于Spring的注入方式

      spring的三种注入方式: 接口注入(不推荐) getter,setter方式注入(比较常用) 构造器注入(死的应用) 关于getter和setter方式的注入: autowire=" ...

  6. Markdown内嵌Html语言

    概述 Markdown是内嵌Html语言的,这使得我们可以在Markdown文档里面实现很多有趣的东西.现在记录在此,供自己以后参考,相信对其他人也有用. 介绍 Markdown的语法只有一个目标:作 ...

  7. [PHP]PDO占位符预处理在 IN 和 LIKE 中用法

    两点注意项: 1. 占位符 (?) 必须被用在整个值的位置,不需要引号等其它字符. 2. 参数按数组元素顺序依次传递给占位符. <?php /** * PDO基于占位符的查询预处理 * * @l ...

  8. jQuery中的选择器及筛选器

    1.jQuery的介绍 1.jQuery是继prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE! 2.它是轻量级的js库,这是其它的js库所不 ...

  9. 利用rsync+inotify实现数据实时同步脚本文件

    将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133. ...

  10. DevExtreme 学习应用[3]

    DevExtreme dxSelectBox 联动查询案例 //数据获取 lookupDataSource = new DevExpress.data.DataSource({ store: stor ...