給定n(n<=100)種物品和一個揹包。物品i的重量是wi,價值爲vi,揹包的容量爲C(C<=1000)。問:應如何選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大? 在選擇裝入揹包的物品時,對每種物品i只有兩個選擇:裝入或不裝入。不能將物品i裝入多次,也不能只裝入部分物品i。
輸入格式:
共有n+1行輸入: 第一行爲n值和c值,表示n件物品和揹包容量c; 接下來的n行,每行有兩個數據,分別表示第i(1≤i≤n)件物品的重量和價值。
輸出格式:
輸出裝入揹包中物品的最大總價值。
輸入樣例:
在這裏給出一組輸入。例如:
5 10
2 6
2 3
6 5
5 4
4 6
輸出樣例:
在這裏給出相應的輸出。例如:
15
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main (){
int n,c,a[1005],b[1005],dp[1005];
int maxl=0;
memset(dp,0,sizeof(dp));
scanf("%d %d",&n,&c);
for(int i=1;i<=n;i++){
scanf("%d %d",&a[i],&b[i]);
}
for(int i=1;i<=n;i++){
for(int j=c;j>=a[i];j--){
dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
}
}
for(int i=0;i<=c;i++){
maxl=max(maxl,dp[i]);
}
printf("%d",maxl);
}