【发布时间】:2012-06-03 02:21:52
【问题描述】:
我正在做一个 spoj 的问题,我试图这样做,但我总是得到 TLE(时间限制已过期) 问题是Hotels。这是我的代码,请告诉我如何优化它。
#include<stdio.h>
int main()
{
unsigned long long int a,b,i;
scanf("%llu %llu",&a,&b);
unsigned long long int arr[a];
for(i=0;i<a;i++)
{
scanf("%llu",&arr[i]);
}
unsigned long long int d;
unsigned long long int k,z=0;
for(i=0;i<a;i++)
{
d = arr[i];
for(k=i+1;k<a+1;k++)
{
if (d<b)
{
if(z<d)
z = d;
}
else
if(d==b)
{
z = d;
break;
}
else
break;
d = d + arr[k];
}
if(d==b)
break;
}
printf("%llu",z);
return 0;
}
在这种情况下,如果输入 5 12 ,这五个是 2 1 3 4 5 到 12 那么我这样做: 首先我将 12 与 2 进行比较,然后是 2+1 ,然后是 2+1+3 ,依此类推,在它达到 5 之后,它将 12 与 1 、 1+3 、 1+3+4 进行比较 .. 这样我就采取了只有当我发现等于 12 时才连续并中断,否则它会一直持续到最后。
Hitesh
【问题讨论】:
-
投票结束。这里没有任何实质的问题。作者没有做出任何努力来解释问题是什么,并且假设我们可以读懂她的想法。我举手……
-
快速解决这个问题的关键是你选择的酒店必须在输入列表中连续。
-
@jerry 我已经连续选择了,
-
@hitesh_jhamb:我相信你的话。从您的代码中(对我而言)这似乎并不明显——尽管我承认我根本没有很好地遵循您的代码。也许比
d、b、z等更有意义的变量名会有所帮助。快速检查看似最简单、最明显的代码当然没有创下速度记录,但确实在规定的时间内完成。
标签: c algorithm dynamic-programming