真 詳解動態規劃 DAG

2021-08-26 02:46:37 字數 2399 閱讀 6083

dag: directed ayclic graph // 有向無環圖

劉汝佳:dag是動態規劃的基礎,很多問題都可以轉化成dag上的最短、最長或路徑計數問題

如nyoj 16

巢狀矩形問題,

描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x(a,b)可以巢狀在矩形y(c,d)中當且僅當a輸入

第一行是乙個正數n(0輸出

每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行

樣例輸入

1

101 2

2 45 8

6 10

7 93 1

5 812 10

9 72 2

樣例輸出

5
分析:學過離散數學都知道二元關係,顯然矩形巢狀關係可以看作乙個二元關係,而二元關係可以用圖來表示。而且,由於a解答:

1.儲存矩形:用結構體儲存

2.儲存二元關係圖:用二維陣列儲存,配對遍歷(n*n)所有矩形,利用條件:a3.定義函式dis(t):從t出發得到的最長路線,則所求為:最大的dis(i)。因此必須將所有的dis(i)給計算出來,進行打擂台求最大值。

4.求所有的dis(i):根據動態規劃的思想:將問題規模化小,轉移狀態,將問題規模縮小。從第i點開始考慮,面對每乙個與之相鄰的點 j 都可以選擇走和不走。

4-1.走:由於從第i點只能走到與之相鄰的點j,如果將第i點移到第j點,要計算dis(i) 則需要計算dis(j), 因為dis(i) = dis(j)+1(為什麼該等式成立請看:從 i 點考慮,dis(i)為從第 i點出發的最長長度,而第i點與第j點連通,所以第 i 點的最大長度dis(i)顯然可以加上dis[j](再加上i與 j之間的距離一般設定為1即可)還不懂的話:將 i 點看作 j 點的先導,打個比方:要到打飯視窗必須先到食堂門口,所以要求到打飯視窗的距離,只要求到食堂門口的距離再加上食堂門口到打飯視窗的距離(將食堂門口和打飯視窗看作兩個連通的點,這個距離就是我們設定的權重一般設定為1就可以對應題目所求數量))

就是要你懂_**:

(該圖為簡化後的二元關係圖圖中的圓圈表示二元關係圖中的點,有箭頭的線表示有向連通,距離是無論方向的,由圖很容易理解為什麼會存在dis[i] = dis[j] + 1這種情況)

4-2.不走:由於狀態沒有改變,dis(i)的值不發生變化。

5.得出動態轉移方程dis(i) = max(dis(i),dis(j)+1), (i,j)∈e (e為邊集)

資料結構:

矩形:結構體陣列

二元關係圖:二維陣列

dis( ): 一維陣列

**:

#include#include#define max 500

#define max(a,b) a>b?a:b

typedef struct rectangle

rectangle;

int graph[max][max];//圖

rectangle rect[max];//矩形

int dis[max];//dis()

int n;

int dynamic_program(int i);

int dynamic_program(int i)

printf("%d\n",ans);

}return 0;

}

附上二元關係圖的二維陣列方便讀者驗證( 連通則為1,否則為0.)

0 1 1 1 1 0 1 1 1 0

0 0 1 1 1 0 1 1 1 0

0 0 0 1 1 0 0 1 1 0

0 0 0 0 0 0 0 1 0 0

0 0 0 0 0 0 0 1 0 0

0 1 1 1 1 0 1 1 1 0

0 0 0 1 1 0 0 1 1 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 1 0 0

0 0 1 1 1 0 1 1 1 0

動態規劃 DAG模型

有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a c,b d或者b c,a d 相當於旋轉x90度 例 1,5 可以巢狀在 6,2 內,但不能巢狀在 3,4 中。你的任務是選出盡可能多的矩形排成一行,使得除最後乙個外,每乙個矩形都可以巢狀在下...

動態規劃 DAG模型

dag 有向無環圖 上的動態規劃是學習動態規劃的基礎。有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a c,b d或者b c,a d 相當於旋轉x90度 例 1,5 可以巢狀在 6,2 內,但不能巢狀在 3,4 中。你的任務是選出盡可能多的矩...

DAG上的動態規劃

dag模型 有n個矩形,每個矩形用兩個整數a,b描述,表示長和寬,矩形 a,b 可以巢狀在矩形 c,d 中,當且僅當a小於c,b小於d或b小於c,a小於d。要解決的問題就是從眾多矩形中選出最多的矩形,使其可以按要求排成一列,若有多解,矩形編號的字典序要盡可能小。分析 按照書上的分析很簡單易懂,也容易...