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$