我正在网上接受挑战并遇到了这个问题,我需要找到分割数字的方法数量' n'进入' k'不平等的要求。例如,
3 - 可分为2和1 4 - 可以分为3和1.注意:我们不能做2和2,因为它们是相等的 5 - (3,2)和(4,1)。等等..
这有什么算法吗?
答案 0 :(得分:0)
python中的代码:
def minArgument(x):
s = 0
i = 1
while s < x:
s += i
i += 1
return i - 1
def maxArgument(x):
return x - 1
def number_of_sumsDP(M, K):
lowerLimit = minArgument(M)
if K < lowerLimit:
return 0
else:
if K - 1 >= M // 2:
return 1 + number_of_sumsDP(M, K - 1)
else:
return 0
def number_of_sums_simple(n):
if n % 2 == 0:
return n // 2 - 1
else:
return n // 2
for i in range(2, 100):
if number_of_sumsDP(i, maxArgument(i)) != number_of_sums_simple(i):
print("mistake")
print("works")
首先考虑动态编程(number_of_sumsDP(M,K)) - 总和的数量等于具有最大可能数量(主题-1)的总和数量和没有它的总和(当数量小于最小值时明显停止) - 当数字少于4 [minArgument]并且当我们开始重复自己[如果K - 1
number_of_sums_simple - 当奇数时返回整数除以2,当偶数时返回相同的减1;作为证据,我确信自己有效。