使用动态规划,您可以找到中不同和的数量,O(n*MAX)
其中MAX
是数组中的最大值。
我们看一下递归函数:
f(W,n,i) = f(W,n-1,i) OR (i != 0 ? f(W-item(n),n-1,i-1) : false)
f(0,0,0) = true
f(W,n,0) = false (W != 0)
f(W,0,i) = false (W != 0)
f(W,n,i) = false (W < 0)
(I have a feeling I forgot another failing base clause, so make sure if I didn't)
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用动态编程自下而上地构建这个,直到,您的答案基本上就是它们的W=3*MAX
不同 s 的数量。W
f(W,n,3) == true
构建表格为O(MAX*3 * n * 3) = O(MAX*n)
,计算不同 s 数量的后处理阶段W
给出所需的总和为O(MAX)
,因此解决方案仍然存在O(MAX * n)
归档时间: |
|
查看次数: |
2427 次 |
最近记录: |