Я решаю проблему, в которой мне нужно найти те элементы из массива, сумма которых дает максимальную сумму. Но есть условие, что никакие два соседних элемента не могут быть частью этого максимального подмассива. Вот мой код, использующий простое решение грубой силы -
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t != 0)
{
int n, i, s, k = 0, m = -1001;
vector< int > a;
cin >> n;
a.resize(n, 0);
vector< int > b;
for (i = 0; i < n; i++)
{
cin >> a[i];
m = max(m, a[i]);
if (a[i] < 0)
{
a[i] = 0;
++k;
}
}
if (k == n)
cout << m;
else
{
k = 0;
s = a[0];
b.push_back(a[0]);
for (i = 1; i < n; i++)
{
if (i != k + 1)
{
if (a[i])
{
s += a[i];
b.push_back(a[i]);
k = i;
}
}
else
{
if (s - a[i - 1] + a[i] > s)
{
b.pop_back();
s -= a[i - 1];
s += a[i];
b.push_back(a[i]);
++k;
}
}
}
}
cout << endl;
for (i = n; i >= 0; i--)
{
if (b[i])
cout << b[i] << " ";
}
cout << endl;
--t;
}
return 0;
}
Здесь вводится код-
Первая строка представляет нет. тестовых случаев,
Вторая строка представляет размер массива
А следующая строка показывает элементы массива. M
5
5
-1 7 8 -5 4
4
3 2 1 -1
4
11 12 -2 -1
4
4 5 4 3
4
5 10 4 -1
output-
4 8
32 32607 -787829912 1 3
32 32607 -787829912 12
3 5
10
Ожидаемый результат-
4 8
1 3
12
3 5
10
Итак, есть 5 тестовых случаев. Для первого и двух последних тестовых примеров выходные данные верны. Но для второго и третьего контрольного примера это дает значение мусора. В чем проблема, что для одних тестовых случаев это дает значение мусора, а для других нет.