題目大意:有乙個固定長度的磁帶,想要把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...