HDU 2602 01揹包模板題

2021-09-26 10:56:39 字數 1156 閱讀 4564

01揹包的特徵在於某樣物品只有乙個,你要麼取它,要麼不取它,只有兩種狀態。(同一種物品不會有很多個,你只能有0個或1個,而不能有3、4、5、6……個)

01揹包模板題,就是當前骨頭取與不取的抉擇問題,選擇收益最大的那個即可。

需要注意的是,揹包的容量要從0開始列舉到v,如果從1開始列舉會wa,可能是資料含有一些骨頭,占用的空間為0。(然而這在現實中並不可能)題意只說了給出的資料的上界而沒有說下界,這樣並不好。

如果將二維陣列優化為一維陣列,注意內層迴圈的方向發生了改變,變成了從後往前。

要改變迴圈方向的原因是,我們當前狀態是**於上一行狀態的,如果迴圈是正向的,我後面要用到上次的狀態的時候,可能前面的把它修改掉了,這樣我們的答案就會錯誤。

二維陣列

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e3+10;

int bone_val[maxn]

;int bone_room[maxn]

;int dp[maxn]

[maxn]

;//01揹包

//dp[i][j] 表示i個物品,容量為j時,能放入的最大的骨頭價值

intmain()

return0;

}

能夠優化成一維陣列

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e3+10;

int bone_val[maxn]

;int bone_room[maxn]

;int dp[maxn]

;//01揹包

intmain()

return0;

}

hdoj 2602 01揹包入門題

其實這幾篇有的是之前寫的,但是在家裡不知道怎麼回事csdn一直上不去,於是來了學校順便整理下。第一道01揹包用了二維的方法解,二維的就是要注意在遍歷揹包容量時要從零開始,並且判斷是否大於該物品的消耗,如果大於的話在考慮是否放入,否則直接就是不能放。include includeint f 1010 ...

hdu1171 多重揹包模板題

最近重新開始學dp,今天做到多重揹包這題,自己寫了乙個 感覺自己確實進步點了 嘻嘻。但是我沒看清題意n 0 退出迴圈,我wa 了無數次。下 面是自己寫的 include include include include include include include include include i...

HDU 1059 多重揹包模板題

題意 有價值為1,2,3,4,5,6的物品,每種物品都有一定數量,問這些物品能不能平分成價值相同的兩份 思路 多重揹包模板題,以價值總額的一半為揹包容量 include include include include include include include include include i...