我该如何处理这种变化?

时间:2015-07-30 19:15:01

标签: c++ arrays algorithm c++11

查找数组中的最大总和,使得没有2个元素相邻。在这方面,还有另外一个条件,即第一个和最后一个元素也不应该在一起。

如果它没有最后一个条件,那么我开发了以下代码,其中我采用两个变量inclexcl并找出值。它如下:

#include <iostream>

using namespace std;

int main (void)
{
    int i,n;
    cin>>n;
    int arr[100];
    for ( i = 0; i < n; i++ )
        cin>>arr[i];
    int incl,excl,excls;
    incl = arr[0];
    for ( i = 1; i < n; i++ )
    {
        if (incl > excl)
            excls = incl;
        else
            excls = excl;
        incl = excl + arr[i];
        excl = excls;
    }
    if (incl > excl)
        cout<<incl;
    else
        cout<<excl;
    cout<<"\n";
    return 0;
}

如何针对特殊情况修改此内容?谢谢!

1 个答案:

答案 0 :(得分:0)

考虑到特殊情况,您可以运行两次现有算法。

第一次计算数组中第一个n-1个元素的最佳总和。这将计算绝对不包括最后一个元素的最佳总和。

第二次计算数组中最后n-1个元素的最佳总和。这将计算绝对不包括第一个元素的最佳总和。

最好的答案将是这两个结果中最好的。

(顺便说一下,你没有初始化变量excl,所以你有时可能得到不正确的结果)