[恢]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 ;
}



posted @ 2012-01-06 23:57  Seraph2012  阅读(223)  评论(0编辑  收藏  举报