U662107 疯狂的背包问题(19) - 求恰好装满的最优方案数

题目背景

动态规划问题中的背包问题求恰好装满方案数模板题,要求计算恰好装满背包容量的方案总数。

题目描述

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

输入格式

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

输出格式

出一个整数,表示在恰好装满背包的条件下,达到最大价值的方案总数对 $10^9 + 7$ 取模后的结果。 如果无法恰好装满背包,输出 $0$。

说明/提示

**样例 1 解释**: 可以恰好装满容量5的方案有:选物品2和3(体积2+3=5),价值为4+4=8。这是唯一能恰好装满的方案,且是最大价值。 **样例 2 解释**: 可以恰好装满容量5的方案有: - 选物品1和4:体积1+4=5,价值2+5=7 - 选物品2和3:体积2+3=5,价值3+4=7 两种方案价值相等,且都是最大价值,方案总数为2。 **样例 3 解释**: 没有任何方案能恰好装满容量5,输出0。 **数据范围** * $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$ 取模