U662015 疯狂的背包问题(16) - 输出字典序最小的最优方案

题目背景

动态规划问题中的背包问题求具体方案模板题,要求输出字典序最小的最优方案。

题目描述

有 $N$ 件物品和一个容量为 $V$ 的背包。每件物品只能使用一次(01背包)。 第 $i$ 件物品的体积是 $v_i$,价值是 $w_i$。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出 **字典序最小的** 最优方案。这里的字典序是指:所选物品的编号序列的字典序。例如,方案 {1, 3, 5} 的字典序小于方案 {1, 4, 5}。

输入格式

第一行有两个整数 $N$ 和 $V$,用空格隔开,分别表示物品个数和背包容积。 接下来有 $N$ 行,每行有两个整数 $v_i$ 和 $w_i$,用空格隔开,分别表示第 $i$ 件物品的体积和价值。

输出格式

输出一行,包含若干个用空格隔开的整数,表示最优方案中所选的物品编号,按照编号升序排列。 如果存在多个最优方案,输出字典序最小的那个。

说明/提示

**样例 1 解释**: 最大价值为 8,有两种方案:选物品 2 和 3(体积 2+3=5,价值 4+4=8),或选物品 1 和 4(体积 1+4=5,价值 2+5=7?不对) 重新计算:物品1(1,2)+物品4(4,5)=体积5,价值7,不是最优。 实际最优:物品2(2,4)+物品3(3,4)=体积5,价值8;或者物品1(1,2)+物品2(2,4)+物品3(3,4)=体积6>5不行。 所以只有一种最优方案:物品2和3,但输出要求字典序最小,物品2和3的编号序列是"2 3"。 但样例输出是"1 4",说明样例有误。修正后的样例: 正确样例: 输入: 4 5 1 2 2 4 3 4 4 5 输出: 2 3 **数据范围** * $1 \leq N \leq 100$ * $1 \leq V \leq 100$ * $1 \leq v_i \leq V$ * $1 \leq w_i \leq 100$