【发布时间】:2020-12-27 23:31:11
【问题描述】:
它显示了错误的答案。谁能告诉我我缺少哪个测试用例?
不相邻
给定一个包含 N 个正整数的数组 arr[]。任务是找到一个总和最大的子序列,使得子序列中的数组中不应该有相邻的元素。
输入: 输入的第一行包含测试用例的数量 T。对于每个测试用例,输入的第一行包含数组 N 的大小。下一行包含分隔的数组空间中的 N 个元素。
输出: 对于每个测试用例,打印子序列的最大和。
约束:
1 <= T <= 100
1 <= N <= 10^6
1 <= arr[i] <= 10^6
例子:
输入:
2
3
1 2 3
3
1 20 3
输出:
4
20
解释:
测试用例 1:元素 1 和 3 形成一个总和最大的子序列,并且子序列中没有元素在数组中相邻。
测试用例 2:数组中的元素 20 形成一个总和最大的子序列。
我也尝试使用以下测试用例
输入:
3
9
1 2 9 4 5 0 4 11 6
1
0
1
1
输出:
26
0
1
它运行良好,但在提交时给出“错误答案”,我不知道它在谈论哪个测试用例
这是我的解决方案:
#include<iostream>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
int sum1,sum2,sum_even=0,sum_odd=0;
for(int i=0;i<n;i+=2)
sum_even+=arr[i];
for(int i=1;i<n;i+=2)
sum_odd+=arr[i];
if(n>=1)
sum1 = arr[0];
else
sum1 = -1;
if(n>=2)
sum2 = arr[1];
else
sum2 = -1;
int new_sum,i;
for(i=2; i<n; i+=2)
{
if((i+1)!=n && arr[i+1]>arr[i])
{
i++;
sum1+=arr[i];
}
else if(i+1==n)
{
sum1+=arr[i];
}
else
{
sum1+=arr[i];
}
}
for(i=3; i<n; i+=2)
{
if((i+1)!=n && arr[i+1]>arr[i])
{
i++;
sum2+=arr[i];
}
else if(i+1 ==n)
{
sum2+=arr[i];
}
else
{
sum2+=arr[i];
}
}
int sum = sum1>sum2 ? sum1 : sum2;
sum = sum>sum_odd ? sum : sum_odd;
sum = sum>sum_even ? sum : sum_even;
cout<<sum<<endl;
}
return 0;
}
【问题讨论】:
-
你给出错误答案的代码在哪里?
-
@cigien 对不起,我忘了放代码。现在你能不能再看看它。谢谢
-
通常,您应该找出至少一个程序失败的测试用例。你写过自己的测试吗?都通过了吗?
标签: c++ arrays algorithm search data-structures