joj2535Train Ticket

 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 }

 

 
 

你可能感兴趣的:(in)