https://www.bilibili.com/video/av36136952?from=search&seid=6264900200776599894
#include <bits/stdc++.h>
using namespace std;
class knapsack
{
private:
vector<int> weight_ = {}; /*商品重量*/
vector<int> value_; /*商品價值*/
int capacity_; /*揹包容量*/
int num_; /**/
/* data */
public:
knapsack(vector<int> &w, vector<int> &value, int cap, int num);
int max_value(vector<vector<int>> &F);
};
knapsack::knapsack(vector<int> &w, vector<int> &v, int cap, int n) : weight_(w), value_(v)
{
capacity_ = cap + 1;
num_ = n + 1;
}
int knapsack::max_value(vector<vector<int>> &F)
{
int i, j;
for (i = 1; i < num_; i++)
{
for (j = 1; j < capacity_; j++)
{
if (weight_[i] > j) /*重量大於揹包容量了*/
F[i][j] = F[i - 1][j];
else
{
int value_take = F[i - 1][j - weight_[i]] + value_[i]; /*拿*/
int value_not_take = F[i - 1][j]; /*不拿*/
F[i][j] = max(value_take, value_not_take);
}
}
}
return F[num_ - 1][capacity_ - 1];
}
int main(int argc, char const *argv[])
{
int num, cap;
cin >> num >> cap; /*輸入商品數量和揹包容量*/
vector<int> weight = {
0,
},
value = {
0,
};
int temp;
for (size_t i = 0; i < num; i++)
{
cin >> temp;
weight.push_back(temp);
}
for (size_t j = 0; j < num; j++)
{
cin >> temp;
value.push_back(temp);
}
vector<vector<int>> F(100,vector<int>(100)); /*100*100 表格*/
knapsack hello(weight, value, cap, num);
cout << hello.max_value(F) << endl;
return 0;
}