POJ 1406

题意:给定n,确定x*x*x+y*(y+1)*(y+2)/6使得不超过n且最接近n

题解:n才十多万,直接打表。

View Code
 1 #include<cstdio>

 2 #include<algorithm>

 3 #include<cstring>

 4 using namespace std;

 5 const int N=160000;

 6 bool mark[160000];

 7 int main()

 8 {

 9     memset(mark,false,sizeof(mark));

10     for(int x=0;;x++)

11     {

12         int t=x*x*x;

13         if(t>=N)

14             break;

15         mark[t]=true;

16         for(int y=0;;y++)

17         {

18             int s=t+y*(y+1)*(y+2)/6;

19             if(s>=N)

20                 break;

21             mark[s]=true;

22         }

23     }

24     int n;

25     while(scanf("%d",&n),n)

26     {

27         while(!mark[n])

28             n--;

29         printf("%d\n",n);

30     }

31     return 0;

32 }

你可能感兴趣的:(poj)