116 - Unidirectional TSP(DP)

原创 2015年07月10日 21:14:31

多段图的最短路问题 。  运用了很多的技巧 :如 记录字典序最小路径 。

细节参见代码:

#include<bits/stdc++.h>
using namespace std;
const int INF = 2000000000;
int m,n,a[15][105],d[15][105],next_[15][105];
int main() {
    while(~scanf("%d%d",&m,&n)) {
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++) scanf("%d",&a[i][j]);
        int ans = INF,first = 0;
        for(int j=n-1;j>=0;j--) {
            for(int i=0;i<m;i++) {
                if(j == n-1) d[i][j] = a[i][j]; //边界
                else {
                    int rows[3] = {i,i-1,i+1};
                    if(i==0) rows[1] = m-1;
                    if(i==m-1) rows[2] = 0;
                    sort(rows,rows+3);    //重新排序,以便找到字典序最小的
                    d[i][j] = INF;
                    for(int k=0;k<3;k++) {
                        int v = d[rows[k]][j+1] + a[i][j];
                        if(v < d[i][j]) { d[i][j] = v; next_[i][j] = rows[k]; }
                    }
                }
                if(j==0&&d[i][j]<ans) { ans = d[i][j]; first = i; } //在最后一列确定最大值以及第一列的行数答案
            }
        }
        printf("%d",first+1);
        for(int i=next_[first][0],j=1;j<n;i=next_[i][j],j++) printf(" %d",i+1);
        printf("\n%d\n",ans);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

TSP问题之状态压缩dp法

动态规划的状态有时候比较难,不容易表示出来,需要用一些编码技术,把状态压缩,用简单的方式表示出来。典型方式就是当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。一般数据n...
  • qq_32400847
  • qq_32400847
  • 2016年07月03日 10:44
  • 2019

状态压缩DP与TSP问题

状态压缩DPDP过程中的状态不可能像背包问题一样只有整数,肯定有各种各样稀奇古怪的状态,需要不止一个变量来表示。这种情况下如果需要使用DP 就必须把状态压缩成一个数来表示,并且一个数只能对应于一种状态...
  • Area_52
  • Area_52
  • 2015年05月25日 10:58
  • 1525

TSP:旅行商问题与内存优化的动态规划

旅行商问题(TSP)的内存优化
  • ljhandlwt
  • ljhandlwt
  • 2016年10月21日 09:02
  • 1801

UVa 116 - Unidirectional TSP(dp)

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

例题9-4 UVa116 Unidirectional TSP(DP:多段图的最短路)

题意: 看白书 要点: 一共三种决策:直行,右上,右下。那么就递推,注意题目中可以从第一列的任意一行出发,而且是环形的,最后还得按字典序输出路径,路径输出就直接用数组记录,因为是倒序递推,所以正...
  • SeasonJoe
  • SeasonJoe
  • 2016年05月15日 11:59
  • 218

UVa 116:Unidirectional TSP(DP)

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=847&page=show_pr...
  • u013520118
  • u013520118
  • 2015年09月16日 16:17
  • 184

UVA - 116 Unidirectional TSP(dp+多段图的最短路)

题意: 给一个n行m列的整数矩阵,从第一列任何一个位置出发每次往右、右上或右下走一格,最终到达最后一列。要求经过的整数之和最小。整个矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行...
  • HelloWorld10086
  • HelloWorld10086
  • 2014年11月06日 15:30
  • 754

UVA 116 Unidirectional TSP 经典dp题

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

DP--UVA - 116 Unidirectional TSP

Description Background Problems that require minimum paths through some domain appear in m...
  • qq_20480611
  • qq_20480611
  • 2015年11月04日 14:02
  • 296

紫书动规 例题9-4 UVA - 116 Unidirectional TSP 多段图的最短路 dp

题目链接:https://vjudge.net/problem/UVA-116题意:题解:dp[i][j]:= 从(i,j)出发到最后一列的最小开销 因为字典序最小,所以每次往前一列转移,都要先从这...
  • yxg_123
  • yxg_123
  • 2017年03月15日 13:12
  • 271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:116 - Unidirectional TSP(DP)
举报原因:
原因补充:

(最多只允许输入30个字)