【问题标题】:Divide array integer 2 even sums将数组整数除以 2 偶数和
【发布时间】:2014-10-06 21:02:49
【问题描述】:

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

【问题讨论】:

  • 检查平衡分区问题
  • 如果你能在多项式时间内解决这个问题,你就会变得非常有名..
  • 动态编程不是递归的替代解决方案。相反,有时您可以通过避免一遍又一遍地重新计算某些东西来加快递归。

标签: c++ arrays integer


【解决方案1】:

我想你可以查看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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多