这个问题与(EXTRACT(HOUR FROM TIME_DIFF) * 60) + EXTRACT(MINUTE FROM TIME_DIFF) + (EXTRACT(SECOND FROM TIME_DIFF) * 1.00 / 60)
假设我们有n个正整数a [1],a [2],...,a [n],我们得到一个整数M.我们想知道是否有一个整数M的子集
如果存在[1]的子集,则设置v [i,m] = 1,a [2],...,a [i]和m,否则v [i,m] = 0。
如果v [i,m] = 1则必须是因为我们只能通过使用数字a [1],a [2],...,a [i-1]得到m或者因为我们可以通过使用相同的数字得到总和m - a [i]。我们得到了递归。
让我们举一个n正整数的例子:[3,2,7,1]和M = 6,然后我们有一个子集[3,2,1]
(ACTL_END_DT - ACTL_START_DT) DAY(4) TO SECOND
这意味着我们可以删除整数1并使3 + 2 = 6,这不会成立,所以我们继续下一个条件:
Subset Sum problem with positive integers
当然3 + 2 = 6-1 - 这种情况应该始终保持。
我在理解他们想说的内容时遗漏了一些东西,有人可以填写吗?
答案 0 :(得分:1)
假设我们知道有一个[1],一个[2],...,a [i]的子集,其总和为m。
问问自己该子集是否包含[i]。
然后可以使用相同的子集来显示a [1],a [2],...,a [i-1]的一个子集,其总和为m。
然后我们知道有一个子集(x,y
因此a [x] + a [y] + ... = m-a [i]
因此,有一个[1],...,a [i-1]的子集,其总和为m-a [i]
所以我们已经证明,如果v [i,m]等于1,那么必须保持一个或其他条件。 (这两种情况也可能成立。)
建设性地看待这一点似乎更自然。
将您可以作为[1],..,a [i-1]的子集的所有值想象一下。在你的例子中[3,2,7]可以生成所有值[0,2,3,5,7,10,12,13]。
然后考虑如果我们也可以包含[i],我们可以制作什么值。这将是与一组值相交的原始值集[0,2,3,5,7,10,12,13],其中[i]加[0 + 1,2 + 1,3 + 1, 5 + 1,7 + 1,10 + 1,12 + 1,13 + 1]。
因此,如果m在旧集合中,或者如果m-a [i]在旧集合中,则值m将在新集合中。