题目:八戒偷重量为n的宝石,但背包不够,求这个背包能装多少价值的宝石
1、//w,c数组分别存储重量与价值
//f数组存储对应的总价值
int w[1001],c[1001],f[1001];
2、 m表示背包总容量,n表示宝石总数
int i,j,m,n;
cin >> m >> n;
3、循环输入宝石重量与对应的价值
for(i = 1;i <= n;i++){
cin >> w[i] >> c[i];
4、动态求解每一个小问题;宝石个数为i 背包大小为j 设f[i]表示前i块宝石,背包容量为j时的最优价值
}
for(i= 1;i <= n;i++){
for(j = 1; j<=m;j--){
if(j >= w[i]){
f[i]=max(f[j],f[j - w[i]] + c[i]);
}
}
}
5、 输出最终最优解
cout << f[m];
总代码:
#include <iostream>
using namespace std;
int w[1001],c[1001],f[1001];
int main(){
int i,j,m,n;
cin >> m >> n;
for(i = 1;i <= n;i++){
cin >> w[i] >> c[i];
}
for(i= 1;i <= n;i++){
for(j = 1; j<=m;j--){
if(j >= w[i]){
f[i]=max(f[j],f[j - w[i]] + c[i]);
}
}
}
cout << f[m];
return 0;
}