UVA 624 記錄路徑dp

2021-08-06 01:35:34 字數 565 閱讀 7396

總得來說,不管是01揹包還是完全揹包,其動態轉移每次只有兩種狀態在轉移,就說這道題目,

dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+val[i])    對於dp[i][j]來說,它只能使由兩個狀態中的乙個轉移過來的,要麼取一件,要麼不取,那麼我們再開乙個二維陣列s[i][j],0表示不取,1表示取,那麼不取是dp[i-1][j],取是dp[i-1][j-v[i]]+val[i];這樣,陣列s[i][j]就記錄下了每次動態轉移的方向,在遞迴呼叫,列印路徑,結果就出來了,具體可以看

uva-624

#include#include#includeusing namespace std;

#includeint dp[10005],w[10005],f[10005];

bool a[25][10005];

int c;

int n,m;

int main()

int c=0;

for(int i=n,j=dp[m];j>0&&i>0;i--)

}for(int i=c-1;i>=0;i--)

cout<

0 1揹包 記錄路徑 UVA624

題目大意 有乙個固定長度的磁帶,想要把cd放進去,空間利用率盡可能的高,每個磁帶只能用一次。01揹包問題,就是把體積和重量看做了tracks和time,這裡注意列印路徑的方法 include include include include include include include includ...

UVA624(dp記錄路徑問題)

根據01揹包二維陣列的動態轉移方程dp i j max dp i 1 j dp i 1 j v i w i 可以知道,dp i j 的狀態和dp i 1 j dp i 1 j v i 有關,於是,在記錄路徑的時候,要是dp i j dp i 1 j 說明,這條路沒有走向dp i 1 j v i 這時...

UVA624(dp記錄路徑問題)

根據01揹包二維陣列的動態轉移方程dp i j max dp i 1 j dp i 1 j v i w i 可以知道,dp i j 的狀態和dp i 1 j dp i 1 j v i 有關,於是,在記錄路徑的時候,要是dp i j dp i 1 j 說明,這條路沒有走向dp i 1 j v i 這時...