码迷,mamicode.com
首页 > 其他好文 > 详细

地道战

时间:2014-12-25 21:43:42      阅读:547      评论:0      收藏:0      [点我收藏+]

标签:

地道战

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 959  Solved: 615

Description

大家一定看过地道战的电视吧。话说小兵张嘎有一回也跑去支援地道战了。那是河北的一个小镇里,这个小镇比较复杂,什么样的人都有。所以张嘎不能走大街,只能在地道里走。但根据地质情况不同,所以同样长的街道,地道里要走的时间可能不一样。当然每条街道下面都有地道,而且在街道连接处地道也有连接。有一天张嘎在A处,突然发现有大部队的敌军前来,所以他必须以尽快的速度跑到B处通知分队隐蔽,每条地道上都标出了他要走的时间。请帮他算一下,怎么走时间最短。
               A +---2---+---3---+----1---+----2---+
                 |       |       |        |        |
                 2       1       2        2        3
                 |       |       |        |        |
                 +---2---+---3---+----4---+---5----+
                 |       |       |        |        |
                 3       4       1        2        3
                 |       |       |        |        |
                 +---2---+---2---+---1----+---4----+
                 |       |       |        |        |
                 2       2       1        3        4
                 |       |       |        |        |
                 +---1---+---3---+---2----+---3----+ B 

Input

有多个测试案例。每个测试案例,第1行输入2个整数N和M (1 <= n,m <=100)分别表示横向的街道的条数和纵向街道的条数。以下n行每行输入各段地道(横向)需要的时间,每行按从左到右的顺序一下m行每行输入各段地道(纵向)需要的时间,每列按从上到下的顺序处理到文件末尾

Output

对每个测试案例输出一行,输出他从A到B的最短时间

Sample Input

4 5
2 3 1 2
2 3 4 5
2 2 1 4
1 3 2 3
2 3 2
1 4 2
2 1 1
2 2 3
3 3 4

Sample Output

13
技术分享
 1 #include<stdio.h>
 2 #define INF 1<<30
 3 int min(int a,int b)
 4 {
 5     return a<=b?a:b;
 6 }
 7 
 8 int main()
 9 {
10     freopen("a.txt","r",stdin);
11     int m,n;
12     int cross[200][200],vertical[200][200];
13     int i,j,k;
14     int dp[250][250];
15     while(scanf("%d%d",&m,&n)==2)
16     {
17         for(i=0;i<=m;i++)
18             for(j=0;j<=n;j++)
19             {
20                 cross[i][j]=INF;
21                 vertical[i][j]=INF;
22             }
23         for(i=1;i<=m;i++)
24             for(j=1;j<=n-1;j++)
25             {
26                 scanf("%d",&cross[i][j]);
27             }
28         for(i=1;i<=m-1;i++)
29             for(j=1;j<=n;j++)
30             {
31                 scanf("%d",&vertical[i][j]);
32             }
33         for(i=0;i<=m;i++)
34             for(j=0;j<=n;j++)
35             {
36                 dp[i][j]=INF;
37             }
38 
39         dp[1][1]=0;
40         for(i=1;i<=m;i++)
41             for(j=1;j<=n;j++)
42             {
43                 if(i==1&&j==1)
44                     continue;
45                 dp[i][j]=0;
46                 dp[i][j]+=min(dp[i-1][j],dp[i][j-1])+min(cross[i][j-1],vertical[j][i-1]);
47             }
48         for(i=1;i<=m;i++)
49         {
50             printf("\n");
51             for(j=1;j<=n;j++)
52             {
53                 printf("%-4d",dp[i][j]);
54             }
55         }
56         printf("%d\n",dp[m][n]);
57     }
58     return 0;
59 }
60     
View Code

 

地道战

标签:

原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4185502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!