URAL 1119 Metro

题目:click here

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int INF = 0x3f3f3f3f;
 5 const int M = 1e3+3;
 6 
 7 int n, m, k;
 8 double dp[M][M];    // dp[i][j] 表示从[0,0]到[i,j]的最短距离
 9 int mark[M][M];     // mark[i][j] 标记[i,j]与[i-1][j-1]之间有对角线
10 int main()  {
11     while( ~scanf("%d%d%d", &n, &m, &k ) )  {
12         memset( mark, 0, sizeof(mark) );
13         for( int i=0; i<k; i++ )    {
14             int x, y;   scanf("%d%d", &x, &y );
15             mark[x][y] = 1;
16         }
17         dp[0][0] = 0;
18         for( int i=1; i<=n; i++ )   dp[i][0] = dp[i-1][0] + 100;
19         for( int j=1; j<=m; j++ )   dp[0][j] = dp[0][j-1] + 100;
20         for( int i=1; i<=n; i++ )   {
21             for( int j=1; j<=m; j++ )   {
22                 dp[i][j] = min( dp[i-1][j]+100, dp[i][j-1]+100 );
23                 if( mark[i][j] )
24                     dp[i][j] = min( dp[i][j], dp[i-1][j-1]+141.421 );
25             }
26         }
27         printf("%.0f\n", dp[n][m] );
28     }
29     return 0;
30 }

 

转载于:https://www.cnblogs.com/TaoTaoCome/p/4736466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值