Что не так в этом решении самой длинной альтернативной программы подпоследовательности - PullRequest
0 голосов
/ 13 апреля 2020

sequence {x1, x2, .. xn} является чередующейся последовательностью, если ее элементы удовлетворяют одному из следующих соотношений:

x1 x3 x5 ..... или x1> x2 x4

Ваша задача - найти самую длинную такую ​​последовательность.

Ввод:

Первая строка ввода содержит целое число T обозначает количество тестовых случаев. Затем следуют тесты T. Первая строка каждого теста содержит целое число N, обозначающее массив размеров A.

Вторая строка каждого теста содержит N целых чисел, разделенных пробелом, обозначающих элементы массива A [].

Выходные данные:

Вывести длину самой длинной чередующейся подпоследовательности для каждого тестового примера в новой строке.

Ограничения:

1 <= T <= 100 </p>

1 <= N <= 1000 </p>

1 <= A [] <= 1000 </p>

Пример:

Ввод:

2

3

1 5 4

8

10 22 9 33 49 50 31 60

Выход:

3

6

Идея, лежащая в основе моего кода, заключается в том, что я создаю массив dp с базовым регистром, равным 1. Теперь, когда значение данного массива в первый раз изменяется a[i+1]>a[i] or a[i+1] < a[i] Я ставлю его значение как 2, т. Е. (dp[i+1]=2) в массиве дп. Теперь предположим, что если в последний раз его значение увеличивается, то я буду увеличивать значение dp, когда следующий элемент данного массива будет уменьшаться, тогда как его предыдущее значение. и я повторю этот процесс поочередно. Теперь этот код кажется мне правильным, но когда я решаю его на платформах кодирования, он дает неправильный вывод для некоторых тестовых случаев. это дает мне большую ценность, чем фактический ответ. Может кто-нибудь помочь мне, где я не прав.

мой код ниже.

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int batman(int a[],int n,int start)
{
   int dp[n];
   for(int i=0;i<=start;i++)
   {
       dp[i]=1;
   }
    bool check;
    if(a[start+1]>a[start]){ check=true; dp[start+1]=2;}
    else{ dp[1+start]=2; check=false;}
    for(int i=2+start;i<n;i++)
    {
        if(check==true)
        {
            if(a[i]>a[i-1])
            {
                dp[i]=dp[i-1];

            }
            else{
                check=false;
                dp[i]=dp[i-1]+1;
                continue; }
        }
        if(check==false)
        {
            if(a[i]<a[i-1])
            {
                dp[i]=dp[i-1];

            }
            else{
                check=true;
                dp[i]=dp[i-1]+1;
                continue; }
        }
    }
    return dp[n-1];
}
int main()
 {
    int t;cin>>t;
    while(t--)
    {
        //code here
        int n;
        cin>>n;
        int a[n];
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        int i=0;
        while(a[i+1]==a[i])
        {
            i++;
        }
       cout<<batman(a,n,i)<<endl;
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...