0 1揹包 記錄路徑 UVA624

2021-08-28 08:07:58 字數 742 閱讀 5505

題目大意:有乙個固定長度的磁帶,想要把cd放進去,空間利用率盡可能的高,每個磁帶只能用一次。

01揹包問題,就是把體積和重量看做了tracks和time,這裡注意列印路徑的方法 

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int n = 5005;

ll dp[3005][n];

int cost[n];

int main()

for(int i = 1; i <= m; ++i)}}

vectorres;

int last = time;

for(int i = m; i >= 1; --i)

else

break;}}

for(int i = res.size()-1; i >= 0; --i)

printf("sum:%d\n",dp[m][time]);

}return 0;

}

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表...

UVA 624 CD 01揹包加路徑記錄問題

其實按照題目來後 我們直接可以寫乙個裸的01揹包,但是就是路徑不知道怎麼記錄。我們知道動態規劃的本質就是用空間換時間的方法,所以他是乙個表。我們可以開乙個vis的二維陣列表,把算出來的值記錄進去。然後把vis陣列倒著遍歷一遍就可以了。為什麼要倒著,應為我們dp表中有很多算出來的中間值不一定是我們要求...

UVA 624 CD (01揹包 帶路徑)

題意 輸入兩個數 len,n 表示長度和個數,接下來輸入n個數,表示每乙個的長度,求這n個數能夠組成的不超過len的最大長度,並輸出這些數。分析 01揹包,dp陣列非0表示可以組成的數,dp陣列用來記錄路徑 include include include include include includ...