初看這道題我想用動態規劃求解,不過由於本章學的是圖的最短路徑問題,所以我使勁的想構造圖來解決這個問題。
構造的圖是有向圖,因爲時間是順着流的。
解題思路:
第i個節點到第j個節點的費用怎麼算呢?就是等於第i年購買某臺機器的費用+ 第i年到第j年的維修費用。
想一想爲什麼?
因爲我的節點的含義是每一年的開始。我們要統計n年的費用肯定得統計到第n年結束。也就是一直統計到第n+1個節點。
所有的其他頂點都有一條邊指向第n+1個節點表示我在其他的某年購買了一臺機器我就不再購買機器了,一直用到第n年年底。
拿實驗要求給的例子說明
那麼我們構造的有向圖爲:
上圖的鄰接矩陣爲
(節點0表示第1年,因爲數組是從下標0開始存儲的,所以就這樣表示)
第i年到第j年的權重=第i年機器的費用+第i年到第j年的維修費
0 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
0 | 0 | 11+5=16 | 11+5+6=22 | 11+5+6+8=30 | 11+5+6+8+11=41 | 11+5+6+8+11+18=59 |
1 | 無窮 | 0 | 11+5=16 | 11+5+6=22 | 11+5+6+8=30 | 11+5+6+8+11=41 |
2 | 無窮 | 無窮 | 0 | 12+5=17 | 12+5+6=23 | 12+5+6+8=31 |
3 | 無窮 | 無窮 | 無窮 | 0 | 12+5=17 | 12+5+6=23 |
4 | 無窮 | 無窮 | 無窮 | 無窮 | 0 | 13+5=18 |
5 | 無窮 | 無窮 | 無窮 | 無窮 | 無窮 | 0 |
如上圖所示,當把圖構造出來後,只需要利用最短路徑算法(Dijkstra算法或者Floyd算法即可求解出來。)
我在另一片博客詳細講解了Dijkstra算法和Floyd算法。詳細講解了單源最短路徑和任意兩個最短路徑的求解方法。
因此,你需要做的就是按照我上述的思路建立一個有向圖,然後跑一遍圖最短路徑算法即可。
具體代碼暫時不公佈,沒時間寫。我自己也有很多實驗ddl要寫,哭了。。
動態規劃算法暫時沒時間寫,以後再公佈。。
點個關注,點個贊再走啊啊啊