Unidirectional TSP UVA - 116

题意:

给你m行n列的矩阵,从第一列出发,到最后一列。
要求
经过的整数和最小。
输出路径上,每列的行号,多解时,输出字典序最小的。

思路:

  1. dp【i】【j】,表示从iii和jjj出发的最小开销(这里因为要记录路径所以从起点出发)

AC

#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define sz(a) (int)a.size()
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
const int INF = 0x3f3f3f3f;
int dp[20][200], a[20][200];
int n, m;
int path[20][200];
int main()
{//   ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);while(~scanf("%d%d",&m,&n)){fori(i,0,m)fori(j,0,n)scanf("%d", &a[i][j]);mst(dp,0x3f); mst(path,0);int ans = INF, first=-1;rep(j,n-1,0)fori(i,0,m){if(j==n-1) dp[i][j] = a[i][j];int row[3] = {i,i-1,i+1};if(row[1] < 0)row[1] = m-1;if(row[2] == m)row[2] = 0;sort(row,row+3);fori(k,0,3){int w = dp[row[k]][j+1] + a[i][j];if(w < dp[i][j])dp[i][j] = w, path[i][j] = row[k];}if(j == 0 && dp[i][j]< ans) ans=dp[i][j], first = i;}printf("%d", first+1);for(int i=path[first][0], j=1; j<n; i=path[i][j], j++){printf(" %d", i+1);}printf("\n%d\n",ans);}return 0;
}

Unidirectional TSP UVA - 116(多阶段决策+输出字典序最小的路径)相关推荐

  1. hihoCoder #1468 : 2-SAT·hihoCoder新春晚会(2-SAT 输出字典序最小的方案)

    描述 hihoCoder新春晚会正在紧张地筹备中.晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场).为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示 ...

  2. UVA116 单向TSP Unidirectional TSP(多阶段决策问题、输出字典序最小的方案、DAG上DP)

    整理的算法模板合集: ACM模板 题目传送门 简单的多阶段决策问题. 多段图DAG,其节点可以划分为若干个阶段,每一个阶段只由上一个阶段所决定. 因为本题要求输出从前到后的方案,所以我们转移方程的时候 ...

  3. 背包问题 输出方案、输出字典序最小方案、可行方案数、最优方案总数

    原文地址:https://blog.csdn.net/ronaldo7_zyb/article/details/81069906 1. 要求输出方案: 以01背包为例 我们可以知到,01背包用一维数组 ...

  4. UVA10537 The Toll! Revisited (思维、最短路、输出字典序最小路径)

    整理的算法模板合集: ACM模板 题目链接 我们要注意去的时候交的n/20单位的货物,但是倒着回去求答案的时候我们要加上ceil(n/19.0)(自己手算) 字典序中大写字母比小写字母更小 注意看数据 ...

  5. poj 1041(欧拉回路+输出字典序最小路径)

    题目链接:http://poj.org/problem?id=1041 思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路.一个无向图存 ...

  6. poj 1815 Friendship 最小割 拆点 输出字典序

    题目链接:http://poj.org/problem?id=1815 题意:A与B能通信当且仅当A知道B的电话号或者A知道C的电话号且C与B能通信.若A知道B的电话号,那么B也知道A的电话号. 然而 ...

  7. hdu 1814 字典序最小的2sat(暴力深搜)

    题意:      题意就是最基础的2sat,关系只有矛盾关系,然后二选一,关键是这个题目是输出字典序最小的那组解. 思路:      输出字典序最小,用强连通那个实现不了(起码没看到有人实现),其实我 ...

  8. UVA 116 Unidirectional TSP DP

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&p ...

  9. UVa 116 (多段图的最短路) Unidirectional TSP

    题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多 ...

最新文章

  1. PHP内置的Web Server的使用
  2. oracle11gr2查看数据库状态,Oracle 11gR2数据库文件丢失后的恢复测试
  3. ZOJ 1049 2^x mod n = 1
  4. POJ 1047 Round and Round We Go
  5. 三分钟了解 Python3 的异步 Web 框架 FastAPI
  6. C语言课后习题(37)
  7. Jekyll本地搭建开发环境以及Github部署流程
  8. python 怎么表示阶乘_python表示阶乘
  9. ElasticSearch全文搜索引擎之Restful API和索引操作篇
  10. .NET清除Session 的几个方法[clear/removeAll/remove/Abandon]
  11. 火箭工作室c++小游戏——斗地主
  12. 【程序员(媛)国人之光】知(美)识(色)贩卖贴】非标题党】
  13. linux 微信安装
  14. 对公共交通app用户推荐理财产品有哪些营销策略?
  15. 人工智能安全(五)—梯度攻击
  16. C++之 fgets函数
  17. 谷歌剧变:李飞飞李佳离职后,现在轮到云CEO出局
  18. MP4和HR-HDTV压制教程
  19. Kmeans聚类时K值选择的方法
  20. 今日头条/字节跳动 后台开发岗(应届生)三轮技术面试

热门文章

  1. 仿新版ofo共享单车小黄人动态效果
  2. Android 11-第三方应用无法拉起微信适配
  3. DARPA——“拒止环境协同作战”:CODE项目初步了解
  4. html根据矩形确定四值坐标,熬夜总结了 “HTML5画布” 的知识点(共10条)
  5. 计算机管理mmc无法,WinXP系统提示MMC无法创建管理单元如何解决?
  6. ceph admin socket机制
  7. eps罗马柱头制作方法_马鞍山EPS屋檐线条安装方案,EPS罗马柱
  8. 怎么把网址后面的index.php去掉,url index.php 怎么去掉
  9. mount.nfs: an incorrect mount option was specified
  10. 有关Tinkercad的PIR传感器的制作