题目
有 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
输出样例
8
解题思路
01背包问题的特点是:每种物品仅有一件,可以选择放或者不放。
方法一:递归
考虑暴力搜索,穷举每一种选择情况,然后对所有情况,求最大值,可以画出如下的递归树:
通过上图,可以很容易得出一个递归表达式:
F ( n , C ) = m a x ( F ( n − 1 , C ) , F ( n − 1 , C − v [ i ] ) + w [ i ] ) F\left ( n,C \right ) =max(F\left ( n-1,C \right ), F\left ( n-1,C-v[i] \right ) +w[i] ) F(n,C)=max(F(n−1,C),F(</