题意

分析

因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了

代码

因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成nt就过了

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
int a[110][110];//矩阵元素数据
int dp[110][110];//记录该位置到最后一列的最小数字总和
int nt[110][110];//next[i][j]该位置j-1列行号最小值
int main(){ int n,m,i,j;
//freopen("in.txt","r",stdin);
while(cin>>m>>n){ for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j]; int ans=inf,first=0; for(j=n-1;j>=0;j--){ for(i=0;i<m;i++){ if(j==n-1) dp[i][j]=a[i][j]; else{
int row[3]={i,i-1,i+1};//右边行不变,右上行减一,右下行加一
if(i==0) row[1]=m-1;//处理特殊情况
if(i==m-1) row[2]=0;
sort(row,row+3);//这样排序确保字典序最小
dp[i][j]=inf;
//动态规划了
for(int k=0;k<3;k++){
int v=dp[row[k]][j+1]+a[i][j];
if(dp[i][j]>v){ dp[i][j]=v;
nt[i][j]=row[k];
}
}
}
if(j==0&&ans>dp[i][j]){
ans=dp[i][j];
first=i;
}
}
}
cout<<first+1;//输出第一列
for(int j=nt[first][0],i=1;i<n;j=nt[j][i],i++)//输出其他列
cout<<" "<<j+1;
cout<<endl;
cout<<ans<<endl;
}
return 0;
}

UVA - 116 Unidirectional TSP 多段图的最短路 dp的更多相关文章

  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(动态规划,多段图上的最短路)

    这道题目并不是很难理解,题目大意就是求从第一列到最后一列的一个字典序最小的最短路,要求不仅输出最短路长度,还要输出字典序最小的路径. 这道题可以利用动态规划求解.状态定义为: cost[i][j] = ...

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

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

  7. UVA 116 Unidirectional TSP 经典dp题

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

  8. UVa 116 Unidirectional TSP (DP)

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

  9. UVa - 116 - Unidirectional TSP

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

随机推荐

  1. windows下编写shell脚本执行错误

    在 windows 下,换行符是 \r\n,在linux下,换行符是 \n.如果你在IDEA里写sh脚本,可以手动设置脚本的换行符为 \n,如果你用notepad++写脚本,可以显示所有字符,以便明确 ...

  2. Linux 内存使用率

    文章参考: 1.正确计算linux系统内存使用率 2.Linux系统内存消失与slab使用之谜 例如当前主机内存信息如下: [zhang@test ~]$ cat /proc/meminfo MemT ...

  3. leetcode 395. Longest Substring with At Least K Repeating Characters(高质量题)

    只能说还是太菜,抄的网上大神的做法: idea: mask 的每一位代表该位字母够不够k次,够k次为0,不够为1 对于每一位将其视为起点,遍历至末尾,找到其最大满足子串T的下标max_idx,之后从m ...

  4. [Jenkins] 如何修改jenkins上的环境变量

    现象 当本地的环境变量发生变化时,在jenkins 构建时里面访问的环境变量仍是之前旧的(未更新的)导致构建出现错误,比如我以我所遇到的问题进行简单写下,下面例子中我是涉及到修改 PYTHONPATH ...

  5. Sublime Text 3安装及常用插件安装

    一.Sublime3下载 1.百度搜索Sublime3 download,选择进入下载页面 2.我选择下载Win64位安装程序 二.Sublime3安装 傻瓜式安装,一直点下一步即可. 三.Subli ...

  6. js中Math之random,round,ceil,floor的用法总结

    1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) 2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分(返回小于等于n的最大整数). ...

  7. 【js】数组的splice方法和slice方法的区别

    1.splice方法和slice都是数组的方法 2.splice方法有3种作用 例如,arr=[1,2,3,4,5,6]; splice方法 删除  arr.splice(1, 1); 返回值为删除的 ...

  8. Shell脚本开发过程中遇到的问题处理

    1. 执行shell脚本报  Unsupported major.minor version 52.0 报错原因:java文件jdk和服务器上的jdk不匹配, 解决方法: a.查看当前服务器用的jdk ...

  9. undefined == false 么

    今天碰到个问题,我需要去判断 undefined == false 会返回什么,想当然的以为会返回true,但是结果却返回的是false,这我就有点晕了,不是说undefined.null.0.NaN ...

  10. Python2.7-内置函数

    具体参见:https://docs.python.org/2/library/functions.html#file 1.进制转换:bin(x), oct(x), hex(x) 把一个十进制数分别转换 ...