CASE1: 01背包,不需要满足刚好装满的条件
#include <bits/stdc++.h>
//#include <algorithm>
using namespace std;
void solvepack(int &len1, int &cap, vector<int> &w, vector<int> &v, vector<vector<int>> &res){
for(int i=1;i<len1;++i){
for(int j=1;j<=cap;++j){
if(w[i]>cap){
res[i][j] = res[i-1][j];
}
else{
res[i][j] = max(res[i-1][j], res[i-1][j-w[i]]+v[i]);
}
}
}
}
int main(){
vector<int> w{0,1,2,3};
vector<int> v{0,60,100,120};
int cap = 5;
int len1 = w.size();
vector<vector<int>> res(len1, vector<int>(cap+1, 0));
solvepack(len1, cap, w, v, res);
cout << res[len1-1][cap] << endl;
return 0;
}
CASE2: 需要满足刚好装满的条件,与CASE1的区别在于二维数组的初始化
#include <bits/stdc++.h>
#define inf