问题描述:
给定n种物品和一背包。物品i的重量为wi,其价值为vi, 背包容量为c。问应如何选择装入背包中的物品,使得背入背包的物品的总价值最大?
输入样例1:
3 10
4 3
5 4
6 5
输出 11
输入样例2:
5 10
6 2
3 2
5 6
4 5
6 4
输出 15
代码:
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n, C;
cin >> n >> C;
vector<vector<int>> data;
data.resize(n);
for(int i = 0; i < n; i++){
int tmp1, tmp2;
cin >> tmp1 >> tmp2;
data[i].push_back(tmp1);
data[i].push_back(tmp2);
}
vector<vector<int>> dp(n+1, vector<int>(C+1, 0));
for(int i = 1; i < n+1; i++){
for(int j = 1; j < C+1; j++){
if(j < data[i-1][1])
dp[i][j] = dp[i-1][j];
else{
dp[i][j] = max(dp[i-1][j], dp[i-1][j - data[i-1][1]]+data[i-1][0]);
}
}
}
cout << dp[n][C] << endl;
return 0;
}