UVA 116 - Unidirectional TSP
2014-10-20 13:08
148 查看
简单的dp问题,很直观,不多说。
#include <iostream> #include <limits> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> using namespace std; const int mrow = 10 + 5; const int mcol = 100 + 10; int a[mrow][mcol]; int b[mrow][3]; int v[mrow][mcol]; int d[mrow][mcol] , f[mrow][mcol]; int dp(int x , int y) { if(v[x][y]) return d[x][y]; v[x][y] = 1; int m = numeric_limits<int>::max(); for(int i = 0 ; i < 3 ; ++i) { int r = dp(b[x][i] , y+1); if(r < m) { m = r ; f[x][y] = b[x][i]; } } return d[x][y] = m + a[x][y]; } int main() { int m , n; while(scanf("%d%d" , &m , &n) == 2) { for(int i = 0 ; i < m ; ++i) { for(int j = 0 ; j < n ; ++j) scanf("%d" , &a[i][j]); } memset(v , 0 , sizeof(v)); for(int i = 0 ; i < m ; ++i) { b[i][0] = (i - 1 + m) % m; b[i][1] = i; b[i][2] = (i + 1) % m; v[i][n-1] = 1; d[i][n-1] = a[i][n-1]; } for(int i = 0 ; i < m ; ++i) { dp(i , 0); } int fst = -1; int ans = numeric_limits<int>::max(); for(int i = 0 ; i < m ; ++i) { if(d[i][0] < ans) {ans = d[i][0]; fst = i; } } printf("%d" , fst + 1); for(int i = 1 ; i < n ; ++i) { if(fst == 0) { int t = f[fst][i-1]; if(d[b[0][1]][i] == d[t][i]) {printf(" %d" , b[0][1] + 1); fst = b[0][1];} else if(d[b[0][2]][i] == d[t][i]) { printf(" %d" , b[0][2] + 1); fst = b[0][2]; } else { printf(" %d" , b[0][0] + 1); fst = b[0][0];} } else if(fst == m-1) { int t = f[fst][i-1]; if(d[b[m-1][2]][i] == d[t][i]) {printf(" %d" , b[m-1][2] + 1); fst = b[m-1][2];} else { printf(" %d" , t + 1); fst = t;} } else { printf(" %d" , f[fst][i-1] + 1); fst = f[fst][i-1]; } } printf("\n%d\n" , ans); } return 0; }
相关文章推荐
- UVA - 116 - Unidirectional TSP(动态规划)
- UVA 116 Unidirectional TSP(DP+记忆化搜索)
- UVA - 116 Unidirectional TSP(dp+多段图的最短路)
- 紫书动规 例题9-4 UVA - 116 Unidirectional TSP 多段图的最短路 dp
- 【解题报告】uva116_Unidirectional TSP(单向TSP, dp)
- uva 116 Unidirectional TSP【数塔+打印路径】
- UVa 116 - Unidirectional TSP(DP)
- uva116 unidirectional TSP 单向TSP (DP)
- UVa116 Unidirectional TSP
- UVA 116 Unidirectional TSP(动态规划)
- D - Unidirectional TSP UVA - 116
- UVa 116:Unidirectional TSP(DP)
- UVA - 116 Unidirectional TSP
- UVA 116 Unidirectional TSP 经典dp题
- UVA 116 Unidirectional TSP
- Unidirectional TSP UVA - 116
- 【UVa 116】Unidirectional TSP
- UVa 116 Unidirectional TSP(DP)
- uva 116 Unidirectional TSP
- UVA - 116 Unidirectional TSP 多段图的最短路