#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
Это ссылка на мой код.
Я не могу реализовать динамическое программирование.
Пожалуйста помоги.
Что я могу сделать, чтобы уменьшить мое время.
Эта проблема требует чтения большого количества данных, так cin
слишком медленный для этого. Ты можешь использовать scanf
вместо.
Удалить массив, он не нужен.
Используйте две переменные, 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 букв.