时间限制超过了骗局CANDYSTN

时间:2014-09-08 18:20:01

标签: c++ time-limiting

  #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 个答案:

答案 0 :(得分:0)

此问题需要读取大量数据,因此cin对于它来说太慢了。您可以改为使用scanf

答案 1 :(得分:0)

删除阵列,不需要它。

使用两个变量presentpreviouspresent变量包含读入的值。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个字母。