HDU 3466 DP入門之01揹包

2021-07-09 15:36:30 字數 710 閱讀 5130

我覺得我是意識模糊了,同樣的錯誤犯了兩次;

錯誤如下:

(1)狀態轉移方程 總是把 dp[j-a[i].p]+a[i].v 的 j 寫為 m ,而且 i 寫成 j

這個題:

給出物品數量n和手中資金m

然後每樣物品給出**p,需要購買時手中至少需要多少資金q;既當前物品你有的錢p一定要大於q(所以p-q<0的就不考慮);還有物品本身的價值v

要求求出可以需求的最大資金

唯一的坑點就是p-q排序了

結構體搞就行了;因為題中說了,不到多錢無法購買之類的,結構體保證了這一條件,和飯卡比較像

#include #include #include using namespace std ;

struct node a[4000];

int dp[5000];

int cmp(node x ,node y)

sort(a,a+n,cmp);

memset(dp,0,sizeof(dp));

for(i=0;i=a[i].q;j--)

{if(dp[j]

各位晚安,qwq困死我了,自動變紅。。。



HDu3466 貪心 01揹包

解法 按照p q的大小排列順序,我們會優先選擇p q較大的結點。按照p q排列順序,就變成了01揹包的問題 但是dp和暴力剛好是兩個逆過程,我們暴力是優先選擇q p大的,dp的時候就要反過來,先遍歷q p小的。簡單的證明 當我們遇到兩個都可以選擇的同時被選的結點,pi qjusing namespa...

hdu 3466 排序01揹包

也是好題,帶限制的01揹包,先排序,再揹包 這題因為涉及到q,所以不能直接就01揹包了。因為如果乙個物品是5 9,乙個物品是5 6,對第乙個進行揹包的時候只有dp 9 dp 10 dp m 再對第二個進行揹包的時候,如果是普通的,應該會借用前面的dp 8 dp 7 之類的,但是現在這些值都是0,所以...

帶限制的01揹包 排序 hdu3466

如果沒有購買條件限制,這道題就是乙個01揹包。所以我們來處理限制。只 dp j a i p 最優,才能保證 dp j 最優,滿足無後效性。若想使 dp j a i p 最優,即要保證對於任意兩組值 p1,q1,v1 p2,q2,v2 假設先選擇1,若想滿足無後效性,則 j a 2 p a 1 q且 ...