//knapsack.cpp : 定义控制台应用程序的入口点
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/*
0-1 背包问题(迭代版)
输入:
products_count:商品的数量
capacity:背包的容量
weight_array:商品重量数组
value_array:商品价格数组
result:结果数组
*/
int knapsack(int products_count,int capacity,vector<int> &weights,vector<int> &values,vector<vector<int>> &res){
for(int i=1;i<=products_count;i++){//i个物品
for(int j=1;j<=capacity;j++){//背包容量为j
if(weights[i] > j){//当前背包的容量 j 放不下第 i 件商品时
res[i][j] = res[i-1][j];
}else
{
res[i][j] = max( res[i-1][j-weights[i]] + values[i] , res[i-1][j]);
}
}
}
return res[products_count][capacity];
}
int main(){
int products_count,capacity;
cout << "please input products count and knapsack's capacity: " << endl; // 输入商品数量和背包容量
cin>>products_count>>capacity;
vector<int> weights(products_count + 1,0);
vector<int> values(products_count + 1,0);
cout << "please input weight array for " << products_count << " products" << endl;
for(int i=1;i<=products_count;i++)
cin>>weights[i];
cout << "please input value array for " << products_count << " products" << endl;
for(int i=1;i<=products_count;i++)
cin>>values[i];
vector<vector<int>> res(products_count + 1,vector<int> (capacity + 1,0));
knapsack(products_count,capacity,weights,values,res);
cout << "knapsack result is " << res[products_count][capacity] << endl;
return 0;
}