在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。
Input
第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000) 第2 - N + 1行,每行2个整数,Wi和Pi,分别是物品的体积和物品的价值。(1 <= Wi, Pi <= 10000)
Output
输出可以容纳的最大价值。
Input示例
3 6 2 5 3 8 4 9
Output示例
14
源代码:
<span style="font-size:18px;">#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<stack> #include<queue> #include<vector> #include<deque> #include<map> #include<set> #include<algorithm> #include<string> #include<iomanip> #include<cstdlib> #include<cmath> #include<sstream> #include<ctime> using namespace std; int vo[105]; int va[105]; int dp[10005]; void OneZeroPack(int n, int v) { int i,j; for(i = 0; i < n; i++) for(j = v; j >= vo[i]; j--) dp[j] = max(dp[j],dp[j - vo[i]] + va[i]); printf("%d ",dp[v]); } int main() { int N,W; int i; scanf("%d%d",&N,&W); for(i = 0; i < N; i++) { scanf("%d%d",&vo[i],&va[i]); } OneZeroPack(N,W); return 0; } </span>