在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。
输入
第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000) 第2 - N + 1行,每行2个整数,Wi和Pi,分别是物品的体积和物品的价值。(1 <= Wi, Pi <= 10000)
输出
输出可以容纳的最大价值。
输入样例
3 6
2 5
3 8
4 9
输出样例
14
代码:
#include <iostream> #include <cstdio> #include <cmath> #define MAX 100 #define DMAX 10000 using namespace std; int N,W; int w[MAX],p[MAX]; int dp[DMAX + 1]; int main() { scanf("%d%d",&N,&W); for(int i = 0;i < N;i ++) { scanf("%d%d",&w[i],&p[i]); } for(int i = 0;i < N;i ++) { for(int j = W;j >= w[i];j --) { dp[j] = max(dp[j],dp[j - w[i]] + p[i]); } } printf("%d",dp[W]); }