📜  门|门CS 2008 |第 44 题

📅  最后修改于: 2021-09-26 04:33:44             🧑  作者: Mango

子集和问题定义如下。给定一组 n 个正整数,S = {a1 ,a2 ,a3 ,…,an} 和正整数 W,是否存在 S 的子集,其元素和为 W?解决此问题的动态程序使用二维布尔数组 X,具有 n 行和 W+1 列。 X[i, j], 1 <= i <= n, 0 <= j <= W, 当且仅当存在 {a1 ,a2 ,…,ai} 的子集其元素和为 j 时为真。以下哪项对 2 <= i <= n 和 ai <= j <= W 有效?
(A) X[i, j] = X[i – 1, j] VX[i, j -ai]
(B) X[i, j] = X[i – 1, j] VX[i – 1, j – ai]
(C) X[i, j] = X[i – 1, j] VX[i, j – ai]
(D) X[i, j] = X[i – 1, j] VX[i -1, j – ai]答案:(乙)
解释: X[I, j] (2 <= i <= n and ai <= j <= W),如果以下任何一项为真,则为真
1) 不包括ai 的权重总和等于j,即,如果X[i-1, j] 为真。
2) 包含ai 的权重总和等于j,即,如果X[i-1, j-ai] 为真,那么我们得到(j – ai) + ai 作为j。
这个问题的测验