【DP算法】Part0 - DP入门思想

Part0Part0 —— DP入门思想

首先,我们来一道极其水沝淼㵘的入门思考题:

【题目简述】给出你一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,想从城市A到达城市D,怎样走路程最短,最短路程的长度是多少?
你看到这行字的时候,就可以退出了!

看完题后,我们发现这里共有 44 条路径:

路径 A→B1→C1→D A→B1→C2→D A→B2→C2→D A→B2→C3→D
长度 5+3+4=12 5+2+3=10 2+7+3=12 2+4+5=11

而怎么找最短路径呢?

【方法1】如果采用枚举算法,分别枚举出4条路径,然后比较每条路经的长度,得出最优解10,路径为A→B1→C2→D。

【方法2】如果我们采用分层递推的思想来做这个题目,会出现什么结果呢?设F(i)表示从点A到达点i的最短距离,则有:

F(A)=0F(A)=0

F(B1)=min{F(A)+5}=5F(B1)=min\left\{F(A)+5\right\}=5

F(B2)=min{F(A)+2}=2F(B2)=min\left\{F(A)+2\right\}=2

F(C1)=min{F(B1)+3}=8F(C1)=min\left\{F(B1)+3\right\}=8

F(C2)=min{F(B1)+2,F(B2)+7}=7F(C2)=min\left\{F(B1)+2,F(B2)+7\right\}=7

F(C3)=min{F(B2)+4}=6F(C3)=min\left\{F(B2)+4\right\}=6

F(D)=min{F(C1)+4,F(C2)+3,F(C3)+5}=10F(D)=min\left\{F(C1)+4,F(C2)+3,F(C3)+5\right\}=10

所以从A到D的最短距离是10,路径为A→B1→C2→D。