题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1399
这道题普通的双层循环15MS
代码:
#include <cstdio>
int a[200];
int b[200];
int n;
int ans ;
int a_len,b_len;
void init()
{
for(int i = 0; i < 54; ++i)
a[i] = i * i * i;
for(int i = 0; i <= 95; ++i)
b[i] = i * (i + 1) * (i + 2) / 6;
}
int main()
{
init();
while(~scanf("%d",&n) && n)
{
ans = 0;
for(int i = 0; i <= 53; ++i)
if(n < a[i])
{
a_len = i - 1;
break;
}
else if(i == 53 && a[i] < n)
a_len = 53;
for(int i = 0; i <= 95; ++i)
{
if(n < b[i])
{
b_len = i - 1;
break;
}
else if(i == 95 && b[i] < n)
b_len = 95;
}
for(int i = a_len;i >= 0;--i)
{
for(int j = b_len;j >= 0;--j)
{
if(a[i] + b[j] <= n && a[i] + b[j] > ans)
ans = a[i] + b[j];
}
}
printf("%d\n",ans);
}
return 0;
}