首页 > 代码库 > 地道战

地道战

地道战

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 52 3 1 22 3 4 52 2 1 41 3 2 32 3 21 4 22 1 12 2 33 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

 

地道战