TYVJ 1061 Mobile Service 解题报告
2011-07-01 20:04
363 查看
看到了觉得无法下手啊!但是看了题解就知道了(是废话不~濮~)。
设p[i]是第i个请求的地方,那么根据题意能够知道在完成第i个请求之前,三个人有一个是在p[i - 1],而且也可以知道完成第i个请求后,有一个人在p[i]上。设完成第i请求之前(未完成)三个人的位置分别是x,y,p[i-1],那么完成请求后就会有三种情况,x前往p[i],三个人的坐标变成y,p[i-1],p[i];或者y前往p[i],三个人的坐标变成x,p[i - 1], p[i];或者p[i - 1]前往p[i],变成:x,y,p[i]。
自然有下面的方程:
f[i][x][y] = f[i - 1][x][y] + map[p[i - 1]][p[i]]
f[i][x][p[i - 1]] = f[i - 1][x][y] + map[y][p[i]]
f[i][y][p[i - 1]] = f[i - 1][x][y] + map[x][p[i]]
代码:
设p[i]是第i个请求的地方,那么根据题意能够知道在完成第i个请求之前,三个人有一个是在p[i - 1],而且也可以知道完成第i个请求后,有一个人在p[i]上。设完成第i请求之前(未完成)三个人的位置分别是x,y,p[i-1],那么完成请求后就会有三种情况,x前往p[i],三个人的坐标变成y,p[i-1],p[i];或者y前往p[i],三个人的坐标变成x,p[i - 1], p[i];或者p[i - 1]前往p[i],变成:x,y,p[i]。
自然有下面的方程:
f[i][x][y] = f[i - 1][x][y] + map[p[i - 1]][p[i]]
f[i][x][p[i - 1]] = f[i - 1][x][y] + map[y][p[i]]
f[i][y][p[i - 1]] = f[i - 1][x][y] + map[x][p[i]]
代码:
#include <stdio.h> #include <stdlib.h> int f[2][201][201]; int map[201][201]; #define min(a, b) ((a)<(b)?(a):(b)) void clean(int n, int k) { int i, j; for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ f[k][i][j] = 0xFFFFFFF; } } } int main(int argc, char **argv) { int i, j, k; int n, m; int a, b; int ans; scanf("%d%d", &n, &m); for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ scanf("%d", &map[i][j]); if(i == j){ map[i][j] = 0; } } } clean(n, 1); scanf("%d", &a); f[1][1][2] = f[1][2][1] = map[3][a]; f[1][2][3] = f[1][3][2] = map[1][a]; f[1][1][3] = f[1][3][1] = map[2][a]; for(i = 2; i <= m; i++){ scanf("%d", &b); clean(n, i % 2); for(j = 1; j <= n; j++){ for(k = 1; k <= n; k++){ if(k == j){ continue; } f[i % 2][j][k] = min(f[i % 2][j][k], f[(i - 1) % 2][j][k] + map[a][b]); f[i % 2][j][a] = min(f[i % 2][j][a], f[(i - 1) % 2][j][k] + map[k][b]); f[i % 2][a][k] = min(f[i % 2][a][k], f[(i - 1) % 2][j][k] + map[j][b]); } } a = b; } ans = 0xFFFFFFF; for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ if(ans > f[m % 2][i][j]){ ans = f[m % 2][i][j]; } } } printf("%d\n", ans); return 0; }
相关文章推荐
- [Tyvj1728]普通平衡树 解题报告
- TYVJ 1073 加分二叉树 解题报告
- [tyvj1730二逼平衡树]解题报告
- TYVJ 1115 同余 解题报告
- TYVJ 1123 道路游戏 解题报告
- 解题报告 tyvj 1068
- TYVJ 1074 武士风度的牛 解题报告
- TYVJ 1107 Hankson的趣味题 解题报告
- TYVJ 1117 拯救ice-cream 解题报告
- TYVJ 1076 数字三角形2 解题报告
- TYVJ 1108 守望者的逃离 解题报告
- TYVJ 1118 a^b 解题报告
- TYVJ 1143 飘飘乎居士的约会 解题报告
- tyvj 衡水中学60周年赛 解题报告
- TYVJ 1065 津津的储蓄计划 解题报告
- TYVJ 1069 cowtour 解题报告
- TYVJ 1085 派对 解题报告
- TYVJ 1093 验证数独 解题报告
- TYVJ 1105 细胞分裂 解题报告
- TYVJ 1109 N阶幻方 解题报告