UVA116 单向TSP Unidirectional TSP(多阶段决策问题、输出字典序最小的方案、DAG上DP)
整理的算法模板合集: ACM模板
题目传送门
简单的多阶段决策问题。
多段图DAG,其节点可以划分为若干个阶段,每一个阶段只由上一个阶段所决定。
因为要将字典序最小方案输出,所以我们右,右上,右下,三个因为是一个环状所以我们需要每次一个排序。每次取相同结果的编号字典序最小的方案作为答案。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;const int N = 207, M = 5e3 +7, maxn = 1007;
const int mod = 1e9+7;
const int INF = 0x3f3f3f3f;int n, m;
int a[N][N];
int f[N][N];//表示以i行j列为起点的最大值
int nex[N][N];
int first;
int ans ;int main()
{while(scanf("%d%d", &n, &m) != EOF){ans = INF;memset(nex, 0, sizeof nex);for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m; ++ j)scanf("%d", &a[i][j]);for(int j = m; j >= 1; -- j){//每一列,每一步,大前提,放外面for(int i = 1; i <= n; ++ i){//每一行if(j == m)f[i][j] = a[i][j];else {int rows[3] = {i, i + 1, i - 1};if(i == 1)rows[2] = n;if(i == n)rows[1] = 1;sort(rows, rows + 3);//排序,以便选择出字典序最小的方案f[i][j] = INF;for(int k = 0; k < 3; ++ k){int w = f[rows[k]][j + 1] + a[i][j];if(w < f[i][j]){f[i][j] = w;nex[i][j] = rows[k];}}}if(j == 1 && ans > f[i][j]){ans = f[i][j], first = i;}}}printf("%d", first);for(int i = nex[first][1], j = 2; j <= m;i = nex[i][j], ++ j){printf(" %d", i);}puts("");printf("%d\n", ans);}return 0;
}
UVA116 单向TSP Unidirectional TSP(多阶段决策问题、输出字典序最小的方案、DAG上DP)相关推荐
- hihoCoder #1468 : 2-SAT·hihoCoder新春晚会(2-SAT 输出字典序最小的方案)
描述 hihoCoder新春晚会正在紧张地筹备中.晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场).为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示 ...
- Unidirectional TSP UVA - 116(多阶段决策+输出字典序最小的路径)
Unidirectional TSP UVA - 116 题意: 给你m行n列的矩阵,从第一列出发,到最后一列. 要求 经过的整数和最小. 输出路径上,每列的行号,多解时,输出字典序最小的. 思路: ...
- 背包问题 输出方案、输出字典序最小方案、可行方案数、最优方案总数
原文地址:https://blog.csdn.net/ronaldo7_zyb/article/details/81069906 1. 要求输出方案: 以01背包为例 我们可以知到,01背包用一维数组 ...
- UVA10537 The Toll! Revisited (思维、最短路、输出字典序最小路径)
整理的算法模板合集: ACM模板 题目链接 我们要注意去的时候交的n/20单位的货物,但是倒着回去求答案的时候我们要加上ceil(n/19.0)(自己手算) 字典序中大写字母比小写字母更小 注意看数据 ...
- poj 1041(欧拉回路+输出字典序最小路径)
题目链接:http://poj.org/problem?id=1041 思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路.一个无向图存 ...
- poj 1815 Friendship 最小割 拆点 输出字典序
题目链接:http://poj.org/problem?id=1815 题意:A与B能通信当且仅当A知道B的电话号或者A知道C的电话号且C与B能通信.若A知道B的电话号,那么B也知道A的电话号. 然而 ...
- Unidirectional TSP—dp
问题描述: Problems that require minimum paths through some domain appear in many different areas of comp ...
- UVa 116 (多段图的最短路) Unidirectional TSP
题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多 ...
- 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)
整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...
最新文章
- li 在 UL 中居中均匀显示
- UI组件之AdapterView及其子类(三)Spinner控件详解
- [转]SQL Server 2000执行计划成本(1/5)
- 服务端_说说Netty服务端启动流程
- VLC设置串流的TTL值
- 扇贝有道180929每日一句
- 零库存挑战-分压电阻选择器V1.01【下载地址发布】
- 【092】召唤神龙-指尖大鱼吃小鱼的魔性游戏
- %3chtml%3e%3c html,403禁止%3Chtml%3E%3Chead%3E%3Cmeta笨
- 使用Flutter实现仿微信录音的插件
- 【算法学习笔记】28.枚举法 解题报告 SJTU OJ 1255 1256 魔戒
- xml 压缩_研究最新的XML压缩技术
- ArduinoIDE初步开发ESP8266时钟
- 猜客魔盒二次开发盲盒APP趣味功能讲解(二)
- Cow Pinball
- 以太坊:导入预售钱包,更新、备份、恢复账号
- 拓展延伸: 实现一个百亿级别的计算器
- 技术:双电脑共享鼠标、键盘解决方案 | USB对拷线、Synergy
- 做一个简易计算器(VB版)
- python 求斐波那契数列第k项