第九章(二)DAG上的動態規劃

2022-06-13 09:42:07 字數 1940 閱讀 7891

dag上的動態規劃:

有向無環圖上的動態規劃是學習dp的基礎,很多問題都可以轉化為dag上的最長路、最短路或路徑計數問題。

1.沒有明確固定起點重點的dag模型:

巢狀矩形問題:有n個矩形,每個矩形可以用兩個整數a、b表示它的長和寬,矩形可以巢狀在矩形中當且僅當a選出盡量多的矩形排成一行,使得除了最後乙個之外,每個矩形都可以巢狀在下乙個矩形內。如果有多解矩形編號字典序應盡量小。

1

/**2

* 巢狀矩形問題:有n個矩形,每個矩形可以用兩個整數a、b表示它的長和寬,

3* 矩形可以巢狀在矩形中當且僅當a4*/5

static

int d= ;

6static

inta=new

int[6][6];78

public

static

void geta(eryuan es) 14}

15}16}

1718

public

static

int dp(int i)

22 d[i]=0;

23for(int j=0;j) 27}

28return

d[i];29}

3031

public

static

void test(int i,string head)

37 string str="";

38for(int j=0;j) 42}

43}44public

static

void

main(string args)

52geta(es);

53for(int i=0;i)

56int max=0;

57for(int i=1;i)

60for(int i=max;i) 64}

65 }

1

class

eryuan

8return

false;9

10}11public eryuan(int x, int

y) 16

17 }

2.固定終點的最長路和最短路

硬幣問題:有n種硬幣,面值分別為v1..vn,每種都有無限多,給定非負整數s。可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣的最小值和最大值1<=n<100,0<=s<=10000,1<=vi<=s

1

static

intd=new

int[10];

2static

intvis=new

int[10];

3static

intv=new

int[5];

4/**

5* 硬幣問題:有n種硬幣,面值分別為v1..vn,每種都有無限多,給定非負整數s。

6* 可以選用多少個硬幣,使得面值之和恰好為s?7*/

8/**

9* s->0的路徑長度

10*

@params11

*/12

public

static

int dp(int

s)

如果要列印出來就同上,可以用遞推或者儲存的方式列印出來,儲存的話用空間換取時間。

3.小結

傳統的遞推法可以表示成「對於每個狀態i,計算f(i)",或者稱為「填表法」.這需要對於每個狀態i,找到f(i)依賴的所有狀態。

刷表法:對於每個狀態i,更新f(i)所影響的狀態。只有當每個狀態所依賴的對它的影響相互獨立時才能用刷表法。

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...

第九章 引用

引用擁有指標的所有功能,只是語法更加的簡單 1 引用就是別名,變數的另外乙個名字,變數和別名它們的位址是一樣的,操作別名就是操作變數 2 引用就是別名常量,一旦引用被初始化就不能再改變了 可以理解為指標常量,指向的值不能改變,能改變的只是它的該位址處的值 3 引用物件huamn mike human...