hdu 3466 排序01揹包

2022-06-03 14:54:15 字數 651 閱讀 1229

也是好題,帶限制的01揹包,先排序,再揹包

這題因為涉及到q,所以不能直接就01揹包了。因為如果乙個物品是5 9,乙個物品是5 6,對第乙個進行揹包的時候只有dp[9],dp[10],…,dp[m],再對第二個進行揹包的時候,如果是普通的,應該會借用前面的dp[8],dp[7]之類的,但是現在這些值都是0,所以會導致結果出錯。於是要想到只有後面要用的值前面都可以得到,那麼才不會出錯。設a:p1,q1 b:p2,q2,如果先a後b,則至少需要p1+q2的容量,如果先b後a,至少需要p2+q1的容量,那麼就是p1+q2 > p2+q1,變形之後就是q1-p1 < q2-p2。

1 #include2 #include

3 #include4 #include5

using

namespace

std;

6const

int maxn=550;7

struct

node

8node[maxn];

11int dp[5500

];12

bool cmp(node a,node b)//

按照 q-p 從小到大排序

1316

intmain()

1730

return0;

31 }

HDU3466 排序 揹包

題目位址 轉移剩餘的空間,當前的剩餘的容量為j,則dp j 由 dp j a i p 轉移過來。但是由於物品出現的位置不確定,所以要排個序。不理解要排序的可以用這兩組樣例試一下 2 10 1 10 10 2 9 10 2 10 2 9 10 1 10 10 正解為20 ac includeusing...

HDu3466 貪心 01揹包

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

帶限制的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且 ...