简单动态规划题。用取模实现第一行与最后一行连续,注意取字典序即可。

我的解题代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; #define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
#define UL(i) ((i+M-1)%M)
#define DL(i) ((i+1)%M)
#define Maxm 12
#define Maxn 105
const int INF = 0x7fffffff; int M,N;
int Table[Maxm][Maxn];
int MinWeight[Maxm][Maxn], RightRow[Maxm][Maxn];
bool vis[Maxm][Maxn]; int dp(int i, int j)
{
if(vis[i][j]) return MinWeight[i][j]; vis[i][j] = true; if(j==N-1) return MinWeight[i][j] = Table[i][j]; int tmp = min ( dp(UL(i),j+1), min ( dp(i,j+1), dp(DL(i),j+1)));
RightRow[i][j] = Maxm;
if(tmp == MinWeight[i][j+1]) RightRow[i][j] = i;
if(tmp == MinWeight[UL(i)][j+1] && UL(i)<RightRow[i][j]) RightRow[i][j] = UL(i);
if(tmp == MinWeight[DL(i)][j+1] && DL(i)<RightRow[i][j]) RightRow[i][j] = DL(i); return MinWeight[i][j] = tmp+Table[i][j];
}
int main()
{
while(cin >> M >> N)
{
for(int i=0; i<M; i++)
for(int j=0; j<N; j++)
cin >> Table[i][j];
memset(vis,false,sizeof(vis)); int nMinWeight = INF, iRow;
for(int i=0; i<M; i++)
{
if(nMinWeight > dp(i,0))
{
nMinWeight = MinWeight[i][0];
iRow = i;
}
}
cout << iRow+1;
for(int j=0; j<N-1; j++) cout << ' ' << (iRow = RightRow[iRow][j])+1;
cout << endl << nMinWeight << endl;
}
return 0;
}

UVa 116: Undirectional 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

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

  5. UVA 116 Unidirectional TSP(DP最短路字典序)

    Description    Unidirectional TSP  Background Problems that require minimum paths through some domai ...

  6. UVA 116 Unidirectional TSP 经典dp题

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

  7. UVa 116 Unidirectional TSP (DP)

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

  8. uva 116 单向TSP

    这题的状态很明显. 转移方程就是 d(i,j)=min(d(i+1,j+1),d(i,j+1),d(i-1,j+1)) //注意边界 我用了一个next数组方便打印结果,但是一直编译错误,原来是不能用 ...

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

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

随机推荐

  1. [转] gdb 查看vector, list, map 内容

    转:http://blog.chinaunix.net/uid-13982689-id-34282.html先下载gdb_stl_utils.tar.gz, extract it, and run m ...

  2. Visual Studio 2012 Ultimate 上安装 Python 开发插件 PTVS

    1.我的环境 操作系统:32位 Win7 旗舰版 Service Pack 1 VS版本:Microsoft Visual Studio Ultimate 2012 版本 11.0.50727.1 R ...

  3. 让linux(centos)支持中文文件和文件夹

    一.让linux支持中文 1.将Linux的env设置了LANG=en_US.UTF-8: 2.本地的Shell客户端编码也设置成UTF-8,这样让在windows上传到linux的文件或者目录不会出 ...

  4. 窗口 对话框 Pop Dialog 示例

    两者的区别 PopupWindow和AlertDialog最大的区别: AlertDialog是非阻塞线程的,AlertDialog弹出的时候,后台可以做其他事情(也即弹出对话框后程序会继续向下执行) ...

  5. MVC4 EF linq从客户端中检测到有潜在的危险的Request.Path值

    今天做项目的时候遇到了这样的问题贴出来给大家分享下啦, 使用MVC4 EF linq跳转视图的时候出现,从客户端中检测到有潜在的危险的Request.Path值错误,如下图所示: 解决办法如下:  r ...

  6. html跳转到同一个页面的不同位置

    <html> <body> <p><a href="#C4">查看 Chapter 4.</a></p> & ...

  7. ASP.NET中的SQL注入攻击与防护

    什么是SQL注入攻击? 它是在执行SQL查询的时候,由于接收了用户的非法参数从而导致,所执行的SQL语义与业务逻辑原本所要查询的语义不相符,从而实现的攻击. 例如我们经常使用的用户登录,通常会出现这样 ...

  8. SQL 语句修改列名 属性 默认值

    --修改字段名exec sp_rename '表名.列名','新列名' --修改字段属性alter table 表名 alter column 列名 nvarchar(100) null; --修改默 ...

  9. Eclipse 导入项目乱码问题(中文乱码)

    1.编码不对 a.对某文件或某工程更改编码:   鼠标移到工程名或文件名,右键->Properties->Resource->Text file enCoding ->更改编码 ...

  10. java rmi 小记

    最近在搞Quartz任务监控管理,碰到了jmx,后来发现Quartz对jmx的支持不是很好,介绍的文档也比较少,另外Quartz可以很方便的支持rmi于是就看了一下rmi.下面把写的一些测试小例子附上 ...