U663298 疯狂的背包问题(3) - 01背包问题(计数组合问题)
题目背景
动态规划问题中的 01 背包问题模板题,本题考察的是**方案计数**而非最优价值或可行性。
题目描述
有 $N$ 件物品和一个容量是 $V$ 的背包。每件物品只能使用一次。
第 $i$ 件物品的体积是 $v_i$。
现需要计算:有多少种不同的选择物品的方案,可以使得**恰好装满**背包(即所选物品的总体积**等于** $V$)?
**注意**:两种方案不同当且仅当它们选择的物品集合不同。
输入格式
第一行两个整数 $N$,$V$,用空格隔开,分别表示物品数量和背包容积。
接下来有 $N$ 行,每行一个整数 $v_i$,表示第 $i$ 件物品的体积。
输出格式
输出一个整数,表示恰好装满背包的方案数。
如果没有任何方案可以恰好装满背包,输出 `0`。
由于答案可能很大,请输出答案对 $10^9 + 7$ 取模的结果。
说明/提示
**数据范围**
* $0 < N, V \leq 10^3$
* $0 < v_i \leq 10^3$
**注意**:
1. 本题只要求计算方案数,不涉及物品价值
2. 物品的输入顺序不影响计数结果
3. 由于需要对大数取模,建议在状态转移时使用取模运算