2535: Train Ticket
Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
3s | 65536K | 394 | 136 | Standard |
每次出外比赛,火车票的问题就出现了。太多的火车路线使acm的教练Coach Li很迷惘,当然,他总是努力使得总起来的火车票价最少。你能帮助他一下吗?
输入给出n和m,表示有n个城市。之后的m次查询。
之后会跟随(n*n)的数字矩阵,a[i][j] 表示i车站到j车站需要a[i][j]的钱。
注意a[i][j]与a[j][i]无必然联系。
然后是m对整数。如果一对整数i,j。表示求城市i到城市j的最小花费
n<=100; m<=100; 其中城市的标号(0<=i < n);
Sample intput
3 1 0 2 1 1 0 3 1 2 0 1 2
Sample output
2
Problem Source: Keenas
This problem is used for contest: 124 185 198
Submit / Problem List / Status / Discuss
略水...
弗洛伊德算法---DP的思想,时间复杂度O(n
^3)。
1 #include <stdio.h> 2 3 int main() 4 { 5 //freopen("in.txt", "r", stdin); 6 int n, m, i, j, k, p, q; 7 int a[105][105]; 8 9 while (scanf("%d %d", &n, &m) == 2) 10 { 11 12 for (i=0; i<n; ++i) 13 { 14 for (j=0; j<n; ++j) 15 { 16 scanf("%d", &a[i][j]); 17 } 18 } 19 20 for (k=0; k<n; ++k) 21 { 22 for (i=0; i<n; ++i) 23 { 24 for (j=0; j<n; ++j) 25 { 26 if ((a[i][k]+a[k][j]) < a[i][j]) 27 { 28 a[i][j] = a[i][k] + a[k][j]; 29 } 30 } 31 } 32 } 33 34 while (m--) 35 { 36 scanf("%d %d", &p, &q); 37 printf("%d\n", a[p][q]); 38 } 39 } 40 41 return 0; 42 }