题意:

给定整数矩阵,从第一列的任何一个位置出发,每次可以向右、右上、右下走一个格,将最后一行和第一行看成是邻接的,最终到达最后一列,路径长度为所经过格中的整数之和,求最小路径,答案不唯一,输出字典序最小的路径。

分析:

数组dp[i][j]记录从第i行第j列出发,到达最后一列的最小路径长度

  • 每个阶段都有三种决策,向右/右上/右下【注意最后一行和第一行的情况
  • 字典序最小,每次都先选择字典序较小的决策
  • 打印路径,记录下一个位置

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100, INF=0x3fffffff;
int c[maxn][maxn], dp[maxn][maxn], s[maxn][maxn];
int main (void)
{
int m ,n;
while(cin>>n>>m){//n行m列
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin>>c[i][j];
dp[i][j] = INF;
}
}
for(int i = m -1; i >= 0; i--){//j行i列
for(int j = 0; j < n; j++){
if(i == m - 1) {dp[j][i] = c[j][i];continue;}
int r[3]={j, j + 1, j - 1};
if(j + 1==n) r[1] = 0;
if(j - 1==-1) r[2] = n-1;
sort(r, r+3);
for(int k = 0; k < 3; k++){
int d = dp[r[k]][i+1] + c[j][i];
if(d<dp[j][i]){
dp[j][i] = d ;
s[j][i] = r[k];
}
}
}
}
int ans = INF, t = 0;
for(int i = 0 ; i < n; i++){
if(dp[i][0]<ans){
ans = dp[i][0];
t = i;
}
}
cout<<t+1;
for(int i = 0; i < m - 1; i++){
t = s[t][i];
cout<<' '<<t+1; }
cout<<endl<<ans<<endl;
}
}

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

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

  6. UVA 116 Unidirectional TSP 经典dp题

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

  7. UVa 116 Unidirectional TSP (DP)

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

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

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

  9. uva 116 - Unidirectional TSP (动态规划)

    第一次做动规题目,下面均为个人理解以及个人方法,状态转移方程以及状态的定义也是依据个人理解.请过路大神不吝赐教. 状态:每一列的每个数[ i ][ j ]都是一个状态: 然后定义状态[ i ][ j ...

随机推荐

  1. SSM Note

    1.获取项目的绝对路径:${pageContext.request.contextPath } 2.销毁session:session.invalidate(); 3.控制器接收前端参数时,参数名要与 ...

  2. AJPFX实列判断一个字符串是不是对称字符串

    import java.util.Scanner; /** *        判断一个字符串是否是对称字符串 */ public class StringDemo { public static vo ...

  3. AJPFX关于static总结

    static 总结 static Fields        static Methods        static member class        static initializer-- ...

  4. Linux下Eclipse连接小米手机真机调试

    以前用Ubuntu 12.04可以真机调试,连上手机就可以了,上次看pear os 好看于是下了个玩玩(界面风格像mac 买不起,仿得起),这次想开发安卓发现真机调试不了了...于是乎各种找资料,各种 ...

  5. 对gridview绑定数据的操作方法及自定义显示内容

    GridView中Eval和 Bind 的使用 Eval:绑定的是只读数据的显示:Bind:可以绑定只读数据也可以绑定更新数据,Bind方法还把字段和控件的绑定属性联系起来,使得 数据控件(比如Gri ...

  6. SQL——视图、事务、锁、存储过程

    https://www.bilibili.com/video/av15496406/?p=57 https://blog.csdn.net/u013630349/article/details/750 ...

  7. @import与link方式的区别

    1. 老祖宗的差别.link属于XHTML标签,而@import完全是CSS提供的一种方式. link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@impo ...

  8. asterisk-java ami5 分机状态,挂机原因之类的

    这些东西网上随便一找一大堆,也只是记录下自己找的.方便以后自己复制粘贴用. 最后为啦实现分机状态在web的实时更新,我选择啦使用websocket. //获得分机状态 public static St ...

  9. System.Web.Optimization找不到引用怎么办

    新建Bootstap for MVC5出现的问题, 通过打开VS 工具->NUGET程序包管理器->控制台 输入以下命令进行完成,一切完成 Install-Package Microsof ...

  10. 优雅的创建map/list集合

    带值的集合的创建 String[] a = {"1","2","3","4"}; boolean q = ArrayUt ...