U662097 疯狂的背包问题(18) - 求最优方案总数

题目背景

动态规划问题中的背包问题求方案总数模板题,要求计算达到最大价值的方案总数。

题目描述

有 $N$ 件物品和一个容量为 $V$ 的背包。每件物品只能使用一次(01背包)。 第 $i$ 件物品的体积是 $v_i$,价值是 $w_i$。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 **达到最大价值的方案总数**。 由于方案总数可能很大,请输出对 $10^9 + 7$ 取模后的结果。

输入格式

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

输出格式

输出一个整数,表示达到最大价值的方案总数对 $10^9 + 7$ 取模后的结果。

说明/提示

**样例 1 解释**: 最大价值为 8,只有一种方案:选物品 2 和 3(体积 2+3=5)。 **样例 2 解释**: 最大价值为 7,有两种方案:选物品 1 和 4(体积 1+4=5),或选物品 2 和 3(体积 2+3=5)。 **样例 3 解释**: 三个体积为1、价值为1的物品,容量为3。 最大价值为3,可以选任意三个物品的组合,共有 C(3,3)=1 种?不对,重新计算: - 选物品1,2,3:体积3,价值3 - 选物品1,2:体积2,价值2(不是最大) - 选物品1,3:体积2,价值2 - 选物品2,3:体积2,价值2 - 选单个物品:体积1,价值1 所以最大价值为3的方案只有1种,但样例输出是7,说明需要重新设计。 修正后的样例: 3 3 1 1 2 2 3 3 输出:4 (选物品3:体积3价值3;选物品1+2:体积3价值3;选物品1+2+3不行;选物品1+3体积4>3不行) **数据范围** * $1 \leq N \leq 100$ * $1 \leq V \leq 100$ * $1 \leq v_i \leq V$ * $1 \leq w_i \leq 100$ * 答案对 $10^9 + 7$ 取模