使用动态规划,您可以找到中不同和的数量,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 的数量。Wf(W,n,3) == true
构建表格为O(MAX*3 * n * 3) = O(MAX*n),计算不同 s 数量的后处理阶段W给出所需的总和为O(MAX),因此解决方案仍然存在O(MAX * n)
| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |