用于检查数组是否可以被分成两个的算法,使得两个子阵列的总和小于给定数

时间:2016-06-27 10:43:35

标签: arrays algorithm language-agnostic dynamic-programming pseudocode

我需要一个算法来检查数组是否可以分为2,或者通常是否有任意数量的子数组(不需要是连续的),这样数组的所有元素之和都不会超过一定数量。我相信它基本上必须用动态编程做一些事情。这是我在Python中的代码:

def func(array, pile1, pile2, memo={}):
    if len(array) == 1:
        return (array[0] <= pile1 or array[0] <= pile2)

    elif sum(array) <= pile1 or sum(array) <= pile2:
        return True

    elif max(array) > max(pile1, pile2):
        return False

    elif sum(array) > pile1 + pile2:
        return False

    elif (array, pile1, pile2) in memo:
        return memo[(array, pile1, pile2)]

    elif (array, pile2, pile1) in memo:
        return memo[(array, pile2, pile1)]

    else:
        item = array[-1]
        array = array[:-1]

        pos1 = func(array, pile1-item, pile2, memo) if pile1-item >= 0 else False
        pos2 = func(array, pile1, pile2-item, memo) if pile2-item >= 0 else False

        memo[(array, pile1, pile2)] = pos1 or pos2                  

        return memo[(array, pile1, pile2)]

两个pile最初包含最大值。

我在网上搜索,发现没有这样的解决方案。你能帮帮我吗?

感谢。

0 个答案:

没有答案