我覺得我是意識模糊了,同樣的錯誤犯了兩次;
錯誤如下:
(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且 ...