Shortest Subchain
来源:互联网 发布:2016软件企业百强 编辑:程序博客网 时间:2024/06/05 18:47
Shortest Subchain
.
.
题意:给出一条链,问第一个点到最后一个点的最短路径,要求走过的边的顺序要和链的顺序相同(即不可以先走后面的边再走前面的边)。
.
.
解法:记忆化搜索就好了,记录每一个点最短路径以及从哪里转移过来的。注意的是记录转移不能直接记录从哪个点,因为记录点的话该点在后面的边加入时可能会改变该点前面的路径,所以要把路径投影到链上,记录从链的哪个点转移过来的。
.
.
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;const int maxn = 100010;int a[maxn], f[maxn], n, preid[maxn] = {0}, id[maxn], ans[maxn];int main() { cin >> n; n--; for (int i = 0; i <= n; i++) scanf("%d", &a[i]); memset(f, 255, sizeof(f)); f[a[0]] = 0; id[a[0]] = 0; preid[0] = -1; for (int i = 1; i <= n; i++) { if (f[a[i-1]]+1 < f[a[i]] || f[a[i]] == -1) { preid[i] = id[a[i-1]]; id[a[i]] = i; f[a[i]] = f[a[i-1]]+1; } } ans[0] = 1; ans[1] = a[n]; int t = id[a[n]]; while (1) { t = preid[t]; if (t == -1) break; ans[0]++; ans[ans[0]] = a[t]; } for (int i = ans[0]; i > 1; i--) printf("%d ", ans[i]); printf("%d\n", ans[1]);}
0 0
- Shortest Subchain
- UVAL 1651 Shortest Subchain(构图+spfa)
- Timus Online Judge 1651 Shortest Subchain
- URAL 1651 Shorest Subchain DP #by Plato
- Shortest Palindromes
- Shortest Prefixes
- Shortest Path
- Shortest Prefixes
- Shortest Prefixes
- Shortest Prefixes
- Shortest Prefixes
- Shortest Prefixes
- Shortest Palindrome
- Shortest Palindrome
- Shortest Palindrome
- Shortest Prefixes
- Shortest Palindrome
- ***Shortest Palindrome
- redis入门
- Ubuntu ftp 服务器
- Android中详解Canvas类
- Struts2学习-01
- Android UI 控件
- Shortest Subchain
- Android使用网络服务发现
- HA(高可用)系统设计原则
- MySQL主从同步/复制
- spring security的配置
- app 被拒原因
- 图片轮播
- Android单元测试步骤
- 一、MTK6580 平台 Camera 驱动整体框架