1、问题描述:一个旅行者随身携带一个背包,可以放入背包的物品有n种,每种物品重量和价值分别为w[i],v[i]。如果背包的最大重量限制是b,每种物品可以放多个。怎样选择放入背包的物品以使得背包的价值最大?上述都是整数。
2、问题解析:这个问题和前述换钱币的问题很相似,首先都是属于两种状态中的累积状态,也就是选取前 i 个值;其次在给边界赋值的时候需要注意一些;状态的变化有两种,由选择第 i 个 和 不选择第 i 个区分;注意二维vector的大小,种类(物品或者货币)有 n 种,可以用 0 表示第一种,也可以用 1 表示第一种(这时需注意下标为 0 是没有用的,但是也要赋值),限制条件(钱的数目或者总重量)有 b+1种,也就是从 0 变化到 b。
3、下面给出代码:
#include<iostream>
#include<vector>
using namespace std;
int max(int, int);
int main() {
int n, b;//物品的种类和重量限制
int i, j;//辅助变量
cin >> n >> b