Превышение лимита времени для спой CANDYSTN

  #include <iostream>
    using namespace std;
    int main()
    {
        long long int i,a,b,arr[10000]={0},dif,sum=0,tem=1,t;
        cin>>t;
        for(int m=0;m<t;m++)
        {
            cin>>a>>b;
            for(i=0;i<b;i++)
            {
                cin>>arr[i];
            }
            for(i=0;i<(b-1);i++)
            {
                dif=arr[i+1]-arr[i];
                sum=sum+dif;
                if(sum<=0 && tem>sum)
                {
                    tem=sum;
                }

            }
            if(a>(1-(tem)))
                cout<<1-tem<<"\n";
            else
                cout<<"-1"<<"\n";

        }
            return 0;
    }

https://ideone.com/vi7TVl Это ссылка на мой код. Я не могу реализовать динамическое программирование.

Пожалуйста помоги. Что я могу сделать, чтобы уменьшить мое время.

2 ответа

Удалить массив, он не нужен.

Используйте две переменные, present а также previous, present переменная содержит значение, которое было прочитано. previous переменная содержит значение, которое было введено ранее.

Вы можете устранить 2 из петель.

  cin >> a >> b;
  int previous = 0;
  int present = 0;
  cin >> present;
  for (unsigned int i = 0; i < b - 1; ++i)
  {
    previous = present;
    cin >> present;
    dif = present - previous;
    sum += diff;
    if ( (sum < 0) && (tem > sum))
    {
      tem = sum;
    }
  }

Кстати, имена переменных допускаются длиной более 3 букв.

Эта проблема требует чтения большого количества данных, так cin слишком медленный для этого. Ты можешь использовать scanf вместо.

Другие вопросы по тегам