UVA 116_ Unidirectional TSP
题意:
给定整数矩阵,从第一列的任何一个位置出发,每次可以向右、右上、右下走一个格,将最后一行和第一行看成是邻接的,最终到达最后一列,路径长度为所经过格中的整数之和,求最小路径,答案不唯一,输出字典序最小的路径。
分析:
数组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的更多相关文章
- 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
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和里面本身的某个东西冲突了,所以编译错了,后来改成 ...
- uva 116 - Unidirectional TSP (动态规划)
第一次做动规题目,下面均为个人理解以及个人方法,状态转移方程以及状态的定义也是依据个人理解.请过路大神不吝赐教. 状态:每一列的每个数[ i ][ j ]都是一个状态: 然后定义状态[ i ][ j ...
随机推荐
- SSM Note
1.获取项目的绝对路径:${pageContext.request.contextPath } 2.销毁session:session.invalidate(); 3.控制器接收前端参数时,参数名要与 ...
- AJPFX实列判断一个字符串是不是对称字符串
import java.util.Scanner; /** * 判断一个字符串是否是对称字符串 */ public class StringDemo { public static vo ...
- AJPFX关于static总结
static 总结 static Fields static Methods static member class static initializer-- ...
- Linux下Eclipse连接小米手机真机调试
以前用Ubuntu 12.04可以真机调试,连上手机就可以了,上次看pear os 好看于是下了个玩玩(界面风格像mac 买不起,仿得起),这次想开发安卓发现真机调试不了了...于是乎各种找资料,各种 ...
- 对gridview绑定数据的操作方法及自定义显示内容
GridView中Eval和 Bind 的使用 Eval:绑定的是只读数据的显示:Bind:可以绑定只读数据也可以绑定更新数据,Bind方法还把字段和控件的绑定属性联系起来,使得 数据控件(比如Gri ...
- SQL——视图、事务、锁、存储过程
https://www.bilibili.com/video/av15496406/?p=57 https://blog.csdn.net/u013630349/article/details/750 ...
- @import与link方式的区别
1. 老祖宗的差别.link属于XHTML标签,而@import完全是CSS提供的一种方式. link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@impo ...
- asterisk-java ami5 分机状态,挂机原因之类的
这些东西网上随便一找一大堆,也只是记录下自己找的.方便以后自己复制粘贴用. 最后为啦实现分机状态在web的实时更新,我选择啦使用websocket. //获得分机状态 public static St ...
- System.Web.Optimization找不到引用怎么办
新建Bootstap for MVC5出现的问题, 通过打开VS 工具->NUGET程序包管理器->控制台 输入以下命令进行完成,一切完成 Install-Package Microsof ...
- 优雅的创建map/list集合
带值的集合的创建 String[] a = {"1","2","3","4"}; boolean q = ArrayUt ...