将数组整数2除以偶数和

Divide array integer 2 even sums

本文关键字:数组 整数      更新时间:2023-10-16

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

我想你可以看看维基百科上关于分区问题的文章。它在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];
}