我们有多少种方法可以将数字分成k个不等的数?

时间:2016-11-15 06:31:12

标签: algorithm

我正在网上接受挑战并遇到了这个问题,我需要找到分割数字的方法数量' n'进入' k'不平等的要求。例如,

3 - 可分为2和1 4 - 可以分为3和1.注意:我们不能做2和2,因为它们是相等的 5 - (3,2)和(4,1)。等等..

这有什么算法吗?

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;作为证据,我确信自己有效。