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