最低通行费 C++(PTA)
上面為代碼。
題目:一個(gè)商人穿過一個(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)過中間的每個(gè)小方格時(shí),都需要繳納一定的費(fèi)用。
這個(gè)商人期望在規(guī)定時(shí)間內(nèi)用最少費(fèi)用穿越出去。請(qǐng)問至少需要多少費(fèi)用?
注意:不能對(duì)角穿越各個(gè)小方格(即,只能向上下左右四個(gè)方向移動(dòng)且不能離開網(wǎng)格)
輸入格式:
第一行是一個(gè)整數(shù),表示正方形的寬度N (1≤N<100);
后面N行,每行N個(gè)不大于100的整數(shù),為網(wǎng)格上每個(gè)小方格的費(fèi)用。
輸出格式:
至少需要的費(fèi)用。
輸入樣例:
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。
思路:
1.從總體來看,本題中商人要從左上角進(jìn)入,右下角出。這意味著我們可以將商人的初始位置定為(1,1)。為了避免打代碼時(shí)腦子混亂,我們可以直接從數(shù)組下標(biāo)為【1】單元開始賦值,這樣子打代碼時(shí)就不用減一了。(前提是數(shù)組要設(shè)大一點(diǎn),比如如果n最大為200,那就要把數(shù)組長(zhǎng)設(shè)置為201或以上)
2.從細(xì)節(jié)上看,本題商人必須在(2N-1)個(gè)單位時(shí)間內(nèi)穿越出去。(2N-1)是什么概念呢?就是商人圍著矩陣最外層走半圈的耗時(shí)。這意味著時(shí)間是非常緊的----商人不能往回走(就是往上或者往左走)這點(diǎn)很重要!!!(朋友們可以自己畫個(gè)圖走一下來感覺)
3.整合以下,就是商人從(1,1)開始走,通過比較下面和右邊格子數(shù)字的大小來進(jìn)行移動(dòng)(不用管左邊和上面的格子,因?yàn)闆]有時(shí)間)如果走到了最下面,那就往右邊走就行了,不用管其大小(還是那個(gè)道理,不用管左邊和上面!!)直到走至(n,n)--也就是右下角的位置。走到最右邊時(shí)同理,只用管下面就行了。
思路理清楚后代碼就不難了,相信各位朋友一定也有自己的見解,歡迎評(píng)論留言!
ps:這是本人 (18歲計(jì)算機(jī)菜鳥) 第一次寫博客,可能語言描述不是很到位,歡迎各位大佬批評(píng)與指正!!
總結(jié)
以上是生活随笔為你收集整理的最低通行费 C++(PTA)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel部分网格线不见了_Excel中
- 下一篇: pg事务篇(一)—— 事务与多版本并发控