nyist 860 又見01揹包

2021-06-26 16:02:00 字數 897 閱讀 4723

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度: 3

描述 有n個重量和價值分別為wi 和 vi 的 物品,從這些物品中選擇總重量不超過 w 

的物品,求所有挑選方案中物品價值總和的最大值。

1 <= n <=100

1 <= wi <= 10^7

1 <= vi <= 100

1 <= w <= 10^9

輸入多組測試資料。

每組測試資料第一行輸入,n 和 w ,接下來有n行,每行輸入兩個數,代表第i個物品的wi 和 vi。

輸出滿足題意的最大價值,每組測試資料佔一行。

樣例輸入

4 5

2 31 2

3 42 2

樣例輸出

7

由於w為10^9無法開出太大的dp陣列 因此將價值作為dp的條件,與重量互換

#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f;

#define min(b,c) (b)>(c)? c:b;

int dp[100000];

int main()

{ int n,w,j,i,s;

int wi[1000],vi[1000];

while(scanf("%d%d",&n,&w)!=eof)

{s=0;

for(i=0; i=vi[i]; j--)

{dp[j]=min(dp[j],dp[j-vi[i]]+wi[i]);

// cout<=0; i--)

{if(dp[i]<=w)

{cout<

nyoj 860 又見01揹包(01 揹包)

又見01揹包 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n個重量和價值分別為wi 和 vi 的 物品,從這些物品中選擇總重量不超過 w 的物品,求所有挑選方案中物品價值總和的最大值。1 n 100 1 wi 10 7 1 vi 100 1 w 10 9 輸入 多組測試...

NYOJ 860 又見01揹包

很經典的一道揹包題目,一般情況,我們都是把揹包的容量作為陣列的變數,但是這一道題,揹包容量資料量太大了。10 9 把容量和價值進行互換 include iostream include stdio.h include string include cstring include cmath incl...

nyoj860又見01揹包

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n個重量和價值分別為wi 和 vi 的 物品,從這些物品中選擇總重量不超過 w 的物品,求所有挑選方案中物品價值總和的最大值。1 n 100 1 wi 10 7 1 vi 100 1 w 10 9 輸入多組測試資料。每組測試資...