- 有n个物品,编号为i的物品的重量为w[i],价值为v[i],现在要从这些物品中选一些物品装到一个容量为m的背包中,使得背包内物体在总重量不超过m的前提下价值尽量大
int maxPackage(vector<int> & w, vector<int> & v, int maxWeight)
{
int sz = w.size();
vector<int> dp(maxWeight + 1, 0);
for (int i = 0; i < sz; ++i){
for (int j = maxWeight; j >= w[i]; --j){
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
return dp[maxWeight];
}
- 测试代码如下所示:
int main()
{
vector<int> w{5,6,4,3,1};
vector<int> v{4,4,3,2,2};
cout << maxPackage(w,v,10) << endl;
system("pause");
return 0;
}
- 返回9,没什么问题