题目描述
有一个背包能装的重量maxw(正整数,0≤maxw≤20000),同时有n件物品(0≤n≤100)(每件物品只有一件,要么拿,要么不拿),每件物品有一个重量wi(正整数)和一个价值vi(正整数)。要求从这n件物品中任取若干件装入背包内,使背包的物品价值最大。
输入
第1行:背包最大载重maxw,物品总数n
第2行到第n+1行:每个物品的重量和价值
输出
一个数字即背包内物品最大价值
样例输入
10 3 4 5 3 4 6 9
样例输出
14
初始代码:
优化后:
#include<bits/stdc++.h>
using namespace std;
long long maxw,n,w[101],v[101],cc[20001];
int main(){cin>>maxw>>n;for(int i=1;i<=n;i++){cin>>w[i]>>v[i];}for(int i=1;i<=n;i++){//第i个物品 for(int j=maxw;j>=w[i];j--){//最大容量 cc[j]=max(cc[j],cc[j-w[i]]+v[i]);//动态转移方程 }}cout<<cc[maxw];return 0;
}