题目描述
设有N种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从N种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。
输入
第一行:两个整数,M背包容量M<=200,N物品数量N<=30
第二行至N+1行:每行两个整数Wi Ci表示每个物品的重量和价值
输出
仅一行,一个数表示最大总价值。
样例输入
10 4 2 1 3 3 4 5 7 9
样例输出
12
Code:
#include<bits/stdc++.h>
using namespace std;
int main(){int M,N,w[505]={},c[505]={},f[505]={};cin>>M>>N;for(int i=1;i<=N;i++){cin>>w[i]>>c[i];}for(int i=1;i<=N;i++){for(int v=w[i];v<=M;v++){f[v]=max(f[v],f[v-w[i]]+c[i]);}}cout<<f[M];return 0;
}