[恢]hdu 1329
2011-12-27 16:05:53
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1329
题意:有n个棍子,依序从1开始放小球,两个相邻的球编号和必须是完全平方数。求最后一个能放下的序号。
mark:最多才1300,直接模拟。
代码:
# include <stdio.h>
# include <string.h>
# include <math.h>
int n ;
int dp[55] ;
int issquare(int a)
{
int b = sqrt(1.0*a) ;
return b*b == a ;
}
int gao()
{
int i, j, flag ;
for (i = 1 ; ; i++)
{
flag = 0 ;
for (j = 0 ; j < n ; j++)
{
if (dp[j] == 0 || issquare (dp[j]+i))
{
dp[j] = i ;
flag = 1 ;
break ;
}
}
if (flag == 0)
return i-1 ;
}
return -1 ;
}
int main ()
{
int T ;
scanf ("%d", &T) ;
while (T--)
{
scanf ("%d", &n) ;
memset (dp, 0, sizeof(dp)) ;
printf ("%d\n", gao()) ;
}
return 0 ;
}