往期
题目
有 N N N 种物品和一个容量是 V V V 的背包,每种物品都有无限件可用。
第 i i i 种物品的体积是 v i v_{i} vi,价值是 w i w_{i} wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
输入格式
第一行两个整数, N N N, V V V,用空格隔开,分别表示物品种数和背包容积。
接下来有 N N N 行,每行两个整数 v i v_{i} vi, w i w_{i} wi,用空格隔开,分别表示第 i i i 种物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0 < N , V ≤ 1000 0< N,V\le 1000 0<N,V≤1000
0 < v i , w i ≤ 1000 0< v_{i} ,w_{i} \le 1000 0<vi,wi≤1000
输入样例
4 5
1 2
2 4
3 4
4 5
输出样例
10
解题思路
完全背包问题的特点是:每个物品可以无限使用。
对于当前物品,与它相关的策略已并非取或不取两种,而是考虑取 0 0 0件、取 1 1 1件、取 2 2 2件…取 k k k件,直到超过当前背包容量 j j j,即 k ∗ v [ i ] ≤ j k\ast v[i]\le j k∗v[i]≤j。因此可以再添加一层循环,来遍历当前这个物品到底装多少个。
- 状态定义
题目的变化对于状态的定义并没有任何影响, d p [ i ] [ j ] dp[i][j] dp