uva 116 Unidirectional TSP【号码塔+打印路径】
主题: uva 116 Unidirectional TSP
意甲冠军:给定一个矩阵,当前格儿童值三个方向回格最小值和当前的和,就第一列的最小值并打印路径(同样则去字典序最小的)、
分析:刚開始想错了,从前往后走,这种话没有办法控制字典序最小,用dfs标记了一下超时了。
事实上从后往前走就好了。
以后一定先想清楚顺序。然后dp的时候选择字典序最小的。用father数据记录就可以。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include <map>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
int a[12][120],father[12][120]; int main()
{
int raw,low;
while(~scanf("%d%d",&raw,&low))
{
for(int i=0;i<raw;i++)
for(int j=0;j<low;j++)
scanf("%d",&a[i][j]);
for(int j=low-2;j>=0;j--)
{
for(int i=0;i<raw;i++)
{
int mi=a[(i+1)%raw][j+1]<a[(i-1+raw)%raw][j+1]?(i+1)%raw:(i-1+raw)%raw;
if(a[(i+1)%raw][j+1]==a[(i-1+raw)%raw][j+1])
mi=min((i+1)%raw,(i-1+raw)%raw);
if(a[i][j+1]<a[mi][j+1])
mi=i;
else if(a[i][j+1]==a[mi][j+1])
mi=min(mi,i);
a[i][j]+=a[mi][j+1];
father[i][j]=mi;
}
}
int ma=inf,tmp=0;
for(int i=0;i<raw;i++)
if(a[i][0]<ma)
ma=a[i][0],tmp=i;
printf("%d",tmp+1);
for(int j=0;j<low-1;j++)
{
printf(" %d",father[tmp][j]+1);
tmp=father[tmp][j];
}
printf("\n%d\n",ma);
}
return 0;
}
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(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 经典dp题
题意:找最短路,知道三种行走方式,给出图,求出一条从左边到右边的最短路,且字典序最小. 用dp记忆化搜索的思想来考虑是思路很清晰的,但是困难在如何求出字典序最小的路. 因为左边到右边的字典序最小就必须 ...
- UVa 116 Unidirectional TSP (DP)
该题是<算法竞赛入门经典(第二版)>的一道例题,难度不算大.我先在没看题解的情况下自己做了一遍,虽然最终通过了,思路与书上的也一样.但比书上的代码复杂了很多,可见自己对问题的处理还是有所欠 ...
- UVa - 116 - Unidirectional TSP
Background Problems that require minimum paths through some domain appear in many different areas of ...
- uva 116 Unidirectional TSP(动态规划,多段图上的最短路)
这道题目并不是很难理解,题目大意就是求从第一列到最后一列的一个字典序最小的最短路,要求不仅输出最短路长度,还要输出字典序最小的路径. 这道题可以利用动态规划求解.状态定义为: cost[i][j] = ...
- UVA - 116 Unidirectional TSP (单向TSP)(dp---多段图的最短路)
题意:给一个m行n列(m<=10, n<=100)的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列.要求经过的整数之和最小.第一行的上一行是最后一行,最后一 ...
- UVA - 116 Unidirectional TSP 多段图的最短路 dp
题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...
随机推荐
- 转载的:Python os 和 os.path模块详解
os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdi ...
- Codeforces 232A - Cycles (构造 + 思维)
题目链接: 232A - Cycles(点击打开) 题意: 要构成一个存在 \(k\) 个三元环的图,需要多少个点,输出顶点数 \(n\),并输出图. 题解: 题目中的任何图都可以用 \(90\)~ ...
- 微信支付v2开发(8) 维权通知
本文介绍微信支付中如何获得维权通知. 一.维权通知URL 在 微信支付开发(1) 微信支付URL配置 已提到,维权通知URL为 http://www.doucube.com/wxpay/rights. ...
- 20160206.CCPP体系具体解释(0016天)
代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...
- 内存、时间复杂度、CPU/GPU以及运行时间
衡量 CPU 的计算能力: 比如一个 Intel 的 i5-2520M @2.5 Ghz 的处理器, 则其计算能力 2.5 * 4(4核) = 10 GFLOPS FLOP/s,Floating-po ...
- stm32单片机时钟中断的配置
原作者:http://www.eeworld.com.cn/mcu/article_2016082828940.html 配置流程: 1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟 ...
- LA 3882 - And Then There Was One(约瑟夫 递归)
看题传送门 题目大意: N个数排成一圈,第一次删除m,以后每k个数删除一次,求最后一被删除的数. 如果这题用链表或者数组模拟整个过程的话,时间复杂度都将高达O(nk),而n<=10000,k&l ...
- 10.2、android输入系统_必备Linux编程知识_双向通信(scoketpair)
2. 双向通信(socketpair) 输入系统肯定涉及进程通讯:进程A读取/分发输入事件,APP处理输入事件,进程A给APP发送输入事件,APP处理完事件回复信息给进程A,APP关闭的时候也要发信息 ...
- ZOJ-1649 Rescue BFS (HDU 1242)
看题传送门: ZOJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649 HDU http://acm.hdu.edu. ...
- java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递
1.首先client须要引入 jquery-1.11.1.js 2.其次javawebproject里面须要引入jar包 [commons-beanutils-1.8.0.jar.commons-c ...