1267:【例9.11】01背包问题
作者:互联网
1267:【例9.11】01背包问题
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 28749 通过数: 17220
【题目描述】
一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,...,Cn,求旅行者能获得最大总价值。
【输入】
第一行:两个整数,MM(背包容量,M<=200M<=200)和NN(物品数量,N<=30N<=30);
第2..N+12..N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值。
【输出】
仅一行,一个数,表示最大总价值。
【输入样例】
10 4 2 1 3 3 4 5 7 9
【输出样例】
12
【代码】
#include <bits/stdc++.h> using namespace std; int v[201],w[201],f[201][201]; int m,n; int main() { cin>>m>>n; for(int i=1;i<=n;i++) { cin>>w[i]>>v[i]; } for(int i=1;i<=n;i++)//n件商品,每一件物品一次的取 { for(int j=1;j<=m;j++)//用递推的思想去放物品 { if(w[i]>j)//如果物品重量大于背包容量 { f[i][j]=f[i-1][j];//这件物品不放,最大价值等于n-1件容量等于j的价值 } else { f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);//两种决则,放和不放 } } } cout<<f[n][m]; return 0;
}
标签:201,...,01,int,1267,9.11,背包 来源: https://www.cnblogs.com/sk2021035/p/16261835.html