【发布时间】:2015-11-30 06:27:54
【问题描述】:
给定一个正整数 n,找出将 n 分成四部分或将 n 表示为四个正整数之和的方法数。这里的 n 在 0 到 5000 之间变化。
def foo(target, k, j):
count = 0
map = {}
if target in map.keys() and map[target] == k:
return map[target]
if target == 0 and k == 0:
return 1
if target <= 0 or k < 0:
return 0
for i in range(j, target+1):
count += foo(target-i, k-1, i)
map[target] = count
return count
print(foo(10, 4, 1))
我已经用上面的递归解决方案解决了这个问题,但我刚刚看到有人用下面的动态编程解决方案。
f(0,0) = 1
f(target, k) = 0 if k > target or (target > 0 and k = 0)
f(target, k) = f(target-k, k) + f(target-1, k-1)
有人能告诉我这个解决方案吗?
【问题讨论】:
-
f(target, k) = f(target-k, k) + p(target-1, k-1)p是什么功能?
标签: algorithm recursion dynamic-programming