除数组整数2偶数和

时间:2014-10-06 21:02:50

标签: c++ arrays integer

我发现很难解决这个编程问题。我需要从N开始获取大小为2 <= N <= 30的整数数组。我需要将数组分成两个较小的数组,它们的总和相等,如果它们不相等,它们需要尽可能接近相同的值。我猜想在这种情况下使用某种递归函数是理想的,但如果没有,动态编程的解决方案也可以正常工作。

1 个答案:

答案 0 :(得分:0)

我猜您可以查看wikipedia article on Partition problem。它在c#中提供了伪多项式算法的伪代码,您可以很容易地将其转换为c ++:

public static bool BalancePartition(int[] S)
{
    int n = S.Length;
    int N = S.Sum();
    bool[,] P = new bool[N / 2 + 1, n + 1];

    for (int i = 0; i < n + 1; i++)
        P[0, i] = true;

    for (int i = 1; i <= N / 2; i++)
        for (int j = 1; j <= n; j++)
            if (S[j - 1] <= i)
                P[i, j] = P[i, j - 1] || P[i - S[j - 1], j - 1];
            else
                P[i, j] = P[i, j - 1];

    return P[N / 2, n];
}