整理的算法模板合集: ACM模板


题目传送门


简单的多阶段决策问题。
多段图DAG,其节点可以划分为若干个阶段,每一个阶段只由上一个阶段所决定。

因为本题要求输出从前到后的方案,所以我们转移方程的时候必须从后往前转移,并且保存每次的最优最小决策,放到nex数组里,这样我们转移完成之后就可以直接从前往后遍历一遍输出方案。如果我们依然正着往后推,那么我们只能记录每一个节点的前驱pre,最后还需要倒序输出方案,比较麻烦。

因为要将字典序最小方案输出,所以我们右,右上,右下,三个因为是一个环状所以我们需要每次一个排序。每次取相同结果的编号字典序最小的方案作为答案。

#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)相关推荐

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

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

  2. Unidirectional TSP UVA - 116(多阶段决策+输出字典序最小的路径)

    Unidirectional TSP UVA - 116 题意: 给你m行n列的矩阵,从第一列出发,到最后一列. 要求 经过的整数和最小. 输出路径上,每列的行号,多解时,输出字典序最小的. 思路: ...

  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. Unidirectional TSP—dp

    问题描述: Problems that require minimum paths through some domain appear in many different areas of comp ...

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

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

  9. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

最新文章

  1. li 在 UL 中居中均匀显示
  2. UI组件之AdapterView及其子类(三)Spinner控件详解
  3. [转]SQL Server 2000执行计划成本(1/5)
  4. 服务端_说说Netty服务端启动流程
  5. VLC设置串流的TTL值
  6. 扇贝有道180929每日一句
  7. 零库存挑战-分压电阻选择器V1.01【下载地址发布】
  8. 【092】召唤神龙-指尖大鱼吃小鱼的魔性游戏
  9. %3chtml%3e%3c html,403禁止%3Chtml%3E%3Chead%3E%3Cmeta笨
  10. 使用Flutter实现仿微信录音的插件
  11. 【算法学习笔记】28.枚举法 解题报告 SJTU OJ 1255 1256 魔戒
  12. xml 压缩_研究最新的XML压缩技术
  13. ArduinoIDE初步开发ESP8266时钟
  14. 猜客魔盒二次开发盲盒APP趣味功能讲解(二)
  15. Cow Pinball
  16. 以太坊:导入预售钱包,更新、备份、恢复账号
  17. 拓展延伸: 实现一个百亿级别的计算器
  18. 技术:双电脑共享鼠标、键盘解决方案 | USB对拷线、Synergy
  19. 做一个简易计算器(VB版)
  20. python 求斐波那契数列第k项

热门文章

  1. 跨模态学习在三维语义分割领域适应中的应用
  2. 【OpenCV 4开发详解】分割图像——分水岭法
  3. 第二篇:n-gram 语言模型
  4. 5 个用 Python 编写 web 爬虫的方法
  5. IDEA 配置maven
  6. 异步获取邮件推送结果
  7. 这样就能用MathType编辑^符号
  8. hadoop、spark/storm等大数据相关视频资料汇总下载
  9. OpenvSwitch代码分析之bridge和port
  10. HttpComponents