根據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 來說,它只能使由兩個狀態中的乙個轉移過來的,要麼取一件,要麼不取,那麼我們再開乙個二維...