📜  算法|动态编程|问题7

📅  最后修改于: 2021-06-28 22:54:34             🧑  作者: Mango

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

有关详细信息,请参见https://www.geeksforgeeks.org/dynamic-programming-subset-sum-problem/。
这个问题的测验