分阶段的DAG,注意字典序的处理和路径的保存。

定义状态d[i][j]为从i,j 出发到最后一列的最小花费,转移的时候只有三种,向上,向下,或平移。

#include<bits/stdc++.h>
using namespace std; const int maxm = ;
const int maxn = ; int G[maxm][maxn];
const int INF = 1e9;
int d[maxm][maxn];
int path[maxn][maxn]; int main()
{
//freopen("in.txt","r",stdin);
int m,n;
while(~scanf("%d%d",&m,&n)){
for(int i = ; i < m; i++)
for(int j = ; j < n ;j++){
scanf("%d",G[i]+j);
}
int ans = INF,head = ;
for(int i = ; i < m; i++) d[i][n-] = G[i][n-];
if(n == ){
for(int i = ; i < m; i++){
if(d[i][]<ans) { ans = d[i][]; head = i; }
}
}else {
for(int j = n-; j >= ; j--){
for(int i = ; i < m; i++){
int nxt[] = {i,i+,i-};
if(i == ) nxt[] = m-;
if(i == m-) nxt[] = ;
sort(nxt,nxt+);
d[i][j] = d[nxt[]][j+];
path[i][j] = nxt[];
for(int k = ; k < ; k++){
int t = d[nxt[k]][j+];
if(t < d[i][j]){
d[i][j] = t; path[i][j] = nxt[k];
}
}
d[i][j] += G[i][j];
if(j == && d[i][j] < ans) { ans = d[i][j]; head = i; }
}
}
} printf("%d",head+);
for(int i = path[head][],j = ; j < n; i = path[i][j], j++){
printf(" %d",i+);
}
printf("\n%d\n",ans);
}
return ;
}

UVA116 Unidirectional TSP 单向TSP的更多相关文章

  1. UVa116 (单向TSP,多决策问题)

    /*----UVa1347 单向TSP 用d(i,j)表示从格子(i,j)出发到最后一列的最小开销 则在(i,j)处有三种决策,d(i,j)转移到d(i-1,j+1),d(i,j+1),d(i+1,j ...

  2. UVa-116 Unidirectional TSP 单向旅行商

    题目 https://vjudge.net/problem/uva-116 分析 设d[i][j]为从(i,j)到最后一列的最小开销,则d[i][j]=a[i][j]+max(d[i+1][j+1], ...

  3. HDU 1619 Unidirectional TSP(单向TSP + 路径打印)

    Unidirectional TSP Problem Description Problems that require minimum paths through some domain appea ...

  4. Uva116 Unidirectional TSP

    https://odzkskevi.qnssl.com/292ca2c84ab5bd27a2a91d66827dd320?v=1508162936 https://vjudge.net/problem ...

  5. UVA - 116 Unidirectional TSP (单向TSP)(dp---多段图的最短路)

    题意:给一个m行n列(m<=10, n<=100)的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列.要求经过的整数之和最小.第一行的上一行是最后一行,最后一 ...

  6. UVa 116 单向TSP(多段图最短路)

    https://cn.vjudge.net/problem/UVA-116 题意:给出m行n列的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列,要求经过的整数之和最小. ...

  7. Uva 116,单向TSP

    题目链接:https://uva.onlinejudge.org/external/1/116.pdf 和矩形嵌套,巴比伦塔差不多. 题意: 给出矩阵,这个矩阵是环形的,就是说第一行的上一行是最后一行 ...

  8. uva 116 单向TSP

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

  9. 基于粒子群算法求解求解TSP问题(JAVA)

    一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

随机推荐

  1. HDOJ-1251

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  2. 【原创】Gitbook使用

    [常用命令] 1.gitbook install 安装依赖模块 2.gitbook build 编译,结果输出在_book文件夹下 3.gitbook serve 本机预览,默认端口为4000 [注意 ...

  3. Linux locate 文件搜索

    在学习 兄弟连 linux教学视频 的时候,我将所学的 linux 命令记录在我的博客中,方便自己查阅. 文件处理命令:locate 基础的命令 命令名称:locate 命令的所在路径:/usr/bi ...

  4. GIL 已经被杀死了么?

    GIL 已经被杀死了么? 本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q ...

  5. HTML5 中的meter 标签的样式设置

    meter { -webkit-appearance: none; position: relative; display: block; margin: 8px auto; width: 100px ...

  6. 嵌入式C语言模块编写

    C 语言源文件 *.c 理想的模块化应该可以看成是一个黑盒子.即我们只关心模块提供的功能,而不管模块内部的实现细节.在大规模程序开发中,一个程序由很多个模块组成,这些模块的编写任务被分配到不同的人,编 ...

  7. Android近场通信---NFC基础(四)(转)

    转自http://blog.csdn.net/think_soft/article/details/8184539 从Intent中获取信息 如果因为NFC的Intent而启动一个Activity,那 ...

  8. Unable to load script from assets 'index.android.bundle'.Make sure your bundle is packaged correctly or you're running a packager server

    curl -k 'http://localhost:8081/index.android.bundle?platform=android' > android/app/src/main/asse ...

  9. 「干货」常用的10个网络DOS命令,菜鸟学了变高手

    1 ping命令 1命令格式 ping 主机名 ping 域名 ping IP地址 如图所示,使用ping命令检查到IP地址210.43.16.17的计算机的连通性,该例为连接正常.共发送了四个测试数 ...

  10. VLAN-3-VLAN Trunk:ISL和802.1Q

      (1)ISL和802.1Q概念       通过使用VLAN Trunk链路,设备可以通过一条链路发送去往多个vlan的流量.为了知道数据帧属于哪个vlan,发送方会添加原始以太网数据帧的头部,这 ...