题目描述
有n种物品,每种物品的重量为w,价值为c。现在需要选出若干件物品放入一个容量为V的背包中(每种物品可以选任意次),使得在选入背包的物品重量之和不超过容量V的前提下,让背包中物品的价值之和最大,求最大价值。
输入描述
第一行两个整数n、V(1≤n≤100,1≤V≤103),分别表示物品数量、背包容量;
第二行为用空格隔开的n个整数w(1≤w100),表示物品重量;
第三行为用空格隔开的n个整数c(1≤c≤100),表示物品价值。
输出描述
输出一个整数,表示最大价值。
输入样例
3 5
1 2 5
2 5 10
输出样例
12
代码:
#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005],w[1005],c[1005];
int main(){
int n,v;
cin>>n>>v;
for(int i = 1;i<=n;i++){
cin>>w[i];
}
for(int i = 1;i<=n;i++){
cin>>c[i];
}
for(int i = 1;i<=n;i++){
for(int j = 0;j<=v;j++){
for(int k = 0;k*w[i]<=j;k++){
dp[i][j] = max(dp[i-1][j],dp[i-1][j-k*w[i]]+k*c[i]);
}
}
}
cout<<dp[n][v];
}