uva 1424 dp
2015-08-16 00:28
344 查看
UVA 1424 - Salesmen
给出一副图,并且给出nhn走过的路径记入,路径可能是错的,问最少修改几个地方可以使得路径是正确的。
dp[i][j] 表示修改第i个位置为j点的前i个位置的最小修改次数。
dp[i][j] = min(dp[i-1][k] + (j == a[i])); {w[k][j] == true 即存在路径k~j}
然后再最后一个点找一个最小值。
给出一副图,并且给出nhn走过的路径记入,路径可能是错的,问最少修改几个地方可以使得路径是正确的。
dp[i][j] 表示修改第i个位置为j点的前i个位置的最小修改次数。
dp[i][j] = min(dp[i-1][k] + (j == a[i])); {w[k][j] == true 即存在路径k~j}
然后再最后一个点找一个最小值。
[code]#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int INF = 999999999; int n, m, k; bool c[105][105]; int a, b; int s[205]; int dp[205][105]; int main () { int T; for (scanf("%d", &T); T>0; T--) { scanf ("%d%d", &n, &m); memset(c, false, sizeof(c)); for (int i=0; i<m; i++) { scanf("%d%d", &a, &b); c[a][b] = c[b][a] = true; } for (int i=1; i<=n; i++) { c[i][i] = true; } scanf ("%d", &k); for (int i=1; i<=k; ++i) { scanf("%d", &s[i]); } for (int i=1; i<=n; i++) { dp[1][i] = 1; } dp[1][s[1]] = 0; for (int i=2; i<=k; i++) { for (int j=1; j<=n; j++) { if (j== s[i]) continue; dp[i][j] = INF; for (int v=1; v<=n; v++) { if (c[v][j] == true) { dp[i][j] = min(dp[i][j], dp[i-1][v] + 1); } } } dp[i][s[i]] = INF; for (int v=1; v<=n; v++) { if (c[v][s[i]]) dp[i][s[i]] = min(dp[i][s[i]], dp[i-1][v]); } } int ans = INF; for (int i=1; i<=n; i++) { ans = min(ans, dp[k][i]); } printf ("%d\n", ans); } return 0; }
相关文章推荐
- win7安装openssl,编译32位&64位
- Java基础之反射
- POJ - 3177 Redundant Paths(强连通分量)
- Gym - 100203I I WIN 网络流
- UVA 11584 dp
- 手动查杀skypee病毒(AutoIt3木马)
- 链队列的实现
- poj1035 spell checker (简单的字符串查找题)
- 费用流 poj2195 Going Home
- uva 1610 Party Games
- 2015华为软件精英挑战赛德州扑克之蒙特卡洛法模拟胜率
- iPhone入门开发系列2备忘录APP学习03--table view
- 基于火狐和谷歌浏览器的html5调用摄像头
- hdu5392 Infoplane in Tina Town(LCM)
- ECLIPSE @OVERRIDE报错解决 必须覆盖超类方法
- 零基础学python-3.7 另一个程序 python读写文本
- 如何实现大文件数据上传
- 零基础学python-3.7 另一个程序 python读写文本
- 全国城市行政区划码Json格式
- 零基础学python-3.6 根据模块结构 改进我们的游戏