U662039 疯狂的背包问题(17) - 求所有最优方案
题目背景
动态规划问题中的背包问题求所有最优方案模板题,要求输出所有能达到最大价值的方案。
题目描述
有 $N$ 件物品和一个容量为 $V$ 的背包。每件物品只能使用一次(01背包)。
第 $i$ 件物品的体积是 $v_i$,价值是 $w_i$。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出 **所有能达到最大价值的方案**。方案按照物品编号的升序排列,不同方案之间按照字典序从小到大输出。
输入格式
第一行有两个整数 $N$ 和 $V$,用空格隔开,分别表示物品个数和背包容积。
接下来有 $N$ 行,每行有两个整数 $v_i$ 和 $w_i$,用空格隔开,分别表示第 $i$ 件物品的体积和价值。
输出格式
输出若干行,每行包含若干个用空格隔开的整数,表示一个最优方案中所选的物品编号,按照编号升序排列。
所有方案按照字典序从小到大输出。如果没有物品可选,则输出空行(即输出一个空行)。
说明/提示
**样例 3 解释**:
最大价值为 12,有三种方案:
- 选物品1、2、4:体积 1+2+4=7,价值 3+4+6=13?计算有误。
重新计算正确值:
物品1(1,3)、物品2(2,4)、物品3(3,5)、物品4(4,6)、物品5(5,7)
最优方案:
1+2+4=1+2+4=7体积,价值3+4+6=13
1+3+5=1+3+5=9体积>8不行
2+3+4=2+3+4=9体积>8不行
需要重新设计样例:
正确样例:
5 8
2 3
3 4
4 5
5 6
6 7
输出:
1 2 3
(体积2+3+4=9>8?还是不行)
修正后的样例:
4 6
1 2
2 3
3 4
4 5
输出:
1 2 3
1 4
2 4
**数据范围**
* $1 \leq N \leq 30$(为了控制方案数量,N较小)
* $1 \leq V \leq 100$
* $1 \leq v_i \leq V$
* $1 \leq w_i \leq 100$