UVA624(dp記錄路徑問題)

2021-09-06 08:56:23 字數 604 閱讀 3584

根據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]],這時,可以另開乙個陣列a[i][j],當dp[i][j]在動態轉移時,==dp[i-1][j],則a[i][j]=0,否則a[i][j]=1;然後對陣列a[i][j]進行回溯即可,具體看**

#include#include#includeusing namespace std;

#define max(x,y) (x>y? x:y)

int dp[13000],a[1000][1000],w[13000],f[10000],count=0;

void print(int n,int m)

}int main()

} count=0;

print(n,m);

for(i=0;iprintf("sum:%d\n",dp[m]);

} return 0;

}

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 這時...

UVA 624 記錄路徑dp

總得來說,不管是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表...

1 UVA624(記錄路徑問題)

1 uva624 記錄路徑問題 總得來說,不管是01揹包還是完全揹包,其動態轉移每次只有兩種狀態在轉移,就說這道題目,dp i j max dp i 1 j dp i 1 j v i val i 對於dp i j 來說,它只能使由兩個狀態中的乙個轉移過來的,要麼取一件,要麼不取,那麼我們再開乙個二維...