#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 这是我的代码的链接。 我无法实现动态编程。
请帮忙。 我该怎么做才能减少我的时间。
答案 0 :(得分:0)
此问题需要读取大量数据,因此cin
对于它来说太慢了。您可以改为使用scanf
。
答案 1 :(得分: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个字母。