题意

分析

因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小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. sql server 2008R2无人值守批处理脚本自动化安装

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. Microsoft SQL Server 2008 R2是一款软件,提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可 ...

  2. 【PAT】B1001 害死人不偿命的(3n+1)猜想

    超级简单题 偶数砍掉一半, 奇数乘三加一砍掉一半 #include<stdio.h> int mian(){ int n,step=0; scanf("%d",n); ...

  3. Visualbox与CentOS 6.4之间鼠标切换

    按住键盘右边的Alt键,再按一下(右边)ctrl键,这样可以实现鼠标能在主机与虚拟机之间自由切换.

  4. Python3编写网络爬虫04-爬取猫眼电影排行实例

    利用requests库和正则表达式 抓取猫眼电影TOP100 (requests比urllib使用更方便,由于没有学习HTML系统解析库 选用re) 1.目标 抓取电影名称 时间 评分 图片等 url ...

  5. SDE ST_Geometry SQL st_intersects查询很慢的解决方法

    环境:服务端 SDE 10.0 oracle 11.2,客户端 PLSQL 11,oracle 11.2 为了调试方便,以下测试都是把sql提取出来在PLSQL上做 需求是已知一个多边形的点坐标,要在 ...

  6. ansible-role写法

    一.role目录的创建: cd /etc/ansible/ mkdir -pv roles/{websrvs,dbsrvs}/{tasks,files,templates,meta,handlers, ...

  7. oracle 11.2.0.4 dbca创建数据库时 报错ORA-12532

    ORA-12532:TNS:无效参数 在实例安装到50%的时候ORA-12532的错误. 原因: sys密码中包含‘@’字符引起的.重新设置,通过.

  8. jmeter(十六)配置元件之计数器

    刚翻看了一下博客的草稿箱,发现很多未完成的草稿,拖了很久,趁着今天较空闲,就补上关于jmeter计数器这篇吧,拖延症,要不得啊... 先说说利用jmeter生成数据的几种方法: 1.CSV Data ...

  9. Omi框架学习之旅 - 组件通讯(data通讯) 及原理说明

    接着上一篇的data-*通讯,这篇写data通讯. data通讯主要为了复杂的数据通讯. 老规矩:先上demo代码, 然后提出问题, 之后解答问题, 最后源码说明. class Hello exten ...

  10. 开发工具|给你的项目买份保险:Python虚拟环境

    读完需要 9 分钟 1. 什么是虚拟环境? 虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰.这在一定程度的意义上,给了我们的项目一份很有力的保障.在这里 ...