题目:
完全背包问题
Description
设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。
Input
第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);
第2…N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。
Output
仅一行,一个数,表示最大总价值。
Sample Input 1
10 4
2 1
3 3
4 5
7 9
Sample Output 1
max=12
Source
一本通
这道题相当于是01背包的升级版,只是在原题上每种物品只有一个变成了无数个,所以只需将01背包改一下就行了,3重for循环暴力枚举,加上枚举多少次的条件即可。
思路:
输入:这步肯定是没有什么异议的
给dp[0][0]赋个值,不然后面没法算感觉海星。
3重for循环开始暴力
输出
前方高能
完整代码:
#include <bits/stdc++.h>
using namespace std;
int dp[1010][1010