Превышение лимита времени для спой 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

Решение

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

0

Другие решения

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

Используйте две переменные, 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 букв.

0

По вопросам рекламы [email protected]