完全背包问题
描述
给定 ? 种物品,其中第 ? 种物品的重量为 W? ,价值为 C? ,每种物品有无限个。有一容积为 ? 的背包,要求选择若干个物品放入背包,使得物品总重量不超过 ? 的前提下,物品的价值总和最大。
输入
第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);
第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。
输出
仅一行,一个数,表示最大总价值。
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int m,n;
int w[35],c[35],dp[205]={0};
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>w[i]>>c[i];
for(int i=1;i<=n;i++)
for(int j=w[i];j<=m;j++)
dp[j]=max(dp[j-w[i]]+c[i],dp[j]);
cout<<"max="<<dp[m];
return 0;
}