1018. 最低通行费(线性DP)
藍(lán)橋杯國(guó)賽指南,詳情見(jiàn)專(zhuān)欄
文章目錄
- Question
- Ideas
- Code
Question
一個(gè)商人穿過(guò)一個(gè) N×N 的正方形的網(wǎng)格,去參加一個(gè)非常重要的商務(wù)活動(dòng)。
他要從網(wǎng)格的左上角進(jìn),右下角出。
每穿越中間 1 個(gè)小方格,都要花費(fèi) 1 個(gè)單位時(shí)間。
商人必須在 (2N?1) 個(gè)單位時(shí)間穿越出去。
而在經(jīng)過(guò)中間的每個(gè)小方格時(shí),都需要繳納一定的費(fèi)用。
這個(gè)商人期望在規(guī)定時(shí)間內(nèi)用最少費(fèi)用穿越出去。
請(qǐng)問(wèn)至少需要多少費(fèi)用?
注意:不能對(duì)角穿越各個(gè)小方格(即,只能向上下左右四個(gè)方向移動(dòng)且不能離開(kāi)網(wǎng)格)。
輸入格式
第一行是一個(gè)整數(shù),表示正方形的寬度 N。
后面 N 行,每行 N 個(gè)不大于 100 的正整數(shù),為網(wǎng)格上每個(gè)小方格的費(fèi)用。
輸出格式
輸出一個(gè)整數(shù),表示至少需要的費(fèi)用。
數(shù)據(jù)范圍
1≤N≤100
輸入樣例:
5
1 4 6 8 10
2 5 7 15 17
6 8 9 18 20
10 11 12 19 21
20 23 25 29 33
輸出樣例:
109
樣例解釋
樣例中,最小值為 109=1+2+5+7+9+12+19+21+33。
Ideas
跟摘花生非常類(lèi)似,不能走回頭路,O(N^2)
Code
# 商人必須在 (2N?1) 個(gè)單位時(shí)間穿越出去。 不能走回頭路 # N <=100 用動(dòng)態(tài)規(guī)劃 N = 110 w = [0] f = [[0 for i in range(N)] for j in range(N)]n = int(input()) for i in range(n):w.append([0]+list(map(int,input().strip().split())))# 求最小值,邊緣初始化要變?yōu)樽畲笾?/span> for i in range(N):f[0][i] = float('inf')f[i][0] = f[0][i] = float('inf')f[1][1] = w[1][1]for i in range(1,n+1):for j in range(1,n+1):if i==1 and j==1 :continuef[i][j] = min(f[i-1][j],f[i][j-1]) + w[i][j] print(f[n][n])總結(jié)
以上是生活随笔為你收集整理的1018. 最低通行费(线性DP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2019年9月30日08:22:25
- 下一篇: visio2013中的网格线怎么去除