帶限制的01揹包 排序 hdu3466

2021-10-08 01:38:26 字數 1171 閱讀 5891

如果沒有購買條件限制,這道題就是乙個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且 j-a[1].p <= a[2].q

否則可能出現,依賴先選2計算的值取到更優的解

由此推得:a[1].q - a[1].p <= a[2].q - a[2].p

因此先對陣列a按照q-p從小到大排序,而後01揹包

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#if __cplusplus >= 201103l

#include

#include

#endif

#define ll long long

using

namespace std;

const

int inf =

0x3f3f3f3f

;int dp[

5010];

struct suta[

510]

;int

cmp(sut a1,sut b)

intmain()

sort

(a+1

,a+1

+n,cmp)

;memset

(dp,0,

sizeof dp)

;for

(int i=

1;i<=n;i++)}

cout<<}return0;

}

hdu3033 加限制條件的0 1揹包

1 include stdlib.h 2 include stdio.h 3 include string h 4int n,m,k,p 101 max 0 v 101 5 intbr 11 101 sum 11 6long f 11 10001 7 8int main 18for i 1 i k ...

hdu 2546 飯卡(有小小限制的 01揹包)

problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一...

hdu 3466 排序01揹包

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