有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 52 31 2
3 42 2
樣例輸出
7思路:由於重量太大不可能開重量的陣列,所以我們可以這樣考慮,求當前價值下的最小重量,這樣的話問題就簡單解決了;
1 #include2 #include3 #include4 #include5using
namespace
std;
6const
int max = 0x3fffffff;7
const
int n = 1e4+10;8
structt9
ma[110
];12
long
long
dp[n];
13int
main()
1425 dp[0] = 0;26
//常用的01揹包
27for(int i = 1; i<=n; i++)
28for(int j = m; j>=ma[i].vi; j--)
2932
int ans = 0;33
for(int i = m; i>=0; i--)
34//
從最大的價值開始遍歷,最大價值不會超過1w36}
37 printf("
%d\n
",ans);38}
39return0;
40 }
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 輸入多組測試資料。每組測試資...
nyoj860 又見01揹包
題源 nyoj860 時間限制 1000 ms 記憶體限制 65535kb 難度 3 描述 有n個重量和價值分 別為wi 和 vi 的 物品,從這些物品中選擇總重量不超過 w 的物品,求所有挑選方案中物品價值總和的最大值。1 n 100 1 wi 10 7 1 vi 100 1 w 10 9 輸入多...