抄近路題解

2021-10-06 21:20:59 字數 1441 閱讀 6668

題目描述

「最近不知道怎麼回事,感覺我們這個城市變成了乙個神奇的地方,有時在路上走著走著人就消失了!走著走著突然又有人出現了!你以為這是《寂靜嶺》,《生化危機》,《行屍走肉》拍攝地?……哎,先不說了,這該死的霧霾又讓我們迷路了。」李旭琳發愁地說。

張琪曼和李旭琳每天要從家到車站,小區被道路分成許多正方形的塊,共有n×m塊。由於道路太多以及霧霾的影響,她們總是迷路,所以你需要幫她們計算一下從家到車站的最短距離。注意,一般情況下,小區內的方塊建有房屋,只能沿著附近的街道行走,有時方塊表示公園,那麼就可以直接穿過。

輸入格式

第一行是n和m(0輸出格式

輸出最短距離,四捨五入到整數公尺。

樣例

樣例輸入

3 23

1 13 2

1 2樣例輸出

383精髓:

這道題主要思想就是先設定乙個判斷(標記)陣列,能對角線走的座標就設為1。在迴圈時,如果這個座標能斜著走,那麼就取斜著走和橫著走的最小值,否則就取橫著走的最小值。

細節:

1.對角線長度為141.42,並且不能取整為141。這是因為如果有很多個對角線的話,小數部分累加起來很有可能大於1,這樣的話就導致答案小了,所以必須把dp陣列定義為double雙精度浮點型別。

2.此題結果需要四捨五入,可以在結果上加0.5,然後取整數部分

即:int(dp[n][m]+0.5);

如果這個數小數部分小於0.5,那麼它加上0.5後整數部分沒有變化;但如果小數部分大於等於0.5的話。那麼它整數部分就會加1。

#include

#include

using

namespace std;

double dp[

1005][

1005];

int pd[

1005][

1005];

intmain()

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=m;i++

)for

(int i=

1;i<=n;i++

)else}}

printf

("%d"

,int

(dp[n]

[m]+

0.5));

return0;

}

動態規劃 抄近路

動態規劃 抄近路 時間限制 1 sec 記憶體限制 64 mb 題目描述 最近不知道怎麼回事,感覺我們這個城市變成了乙個神奇的地方,有時在路上走著走著人就消失了!走著走著突然又有人出現了!你以為這是 寂靜嶺 生化危機 行屍走肉 拍攝地?哎,先不說了,這該死的霧霾又讓我們迷路了。李旭琳發愁地說。張琪曼...

演算法競賽寶典 動態規劃 抄近路

抄近路 shortline.cpp c pas 題目描述 最近不知道怎麼回事,感覺我們這個城市變成了乙個神奇的地方,有時在路上走著走著人就消失了!走著走著突然又有人出現了!你以為這是 寂靜嶺 生化危機 行屍走肉 拍攝地?哎,先不說了,這該死的霧霾又讓我們迷路了。李旭琳發愁地說。張琪曼和李旭琳每天要從...