题意:给你一个数,然后求由至多4个数的平方和组成这个数的种数,组合一样的就只能算是一类,开始用搜索写的,超时了,然后打了个表就直接过了,估计是递归太过于费时了吧。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N = 32768;
int mypow[182];
int num[N];
void ini()
{
for(int i=0;i<=181;++i)
mypow[i] = i*i;
for(int a=0;a<=181;++a)
{
for(int b=a;b<=181;++b)
{
if(mypow[b]+mypow[a]>=N)
break;
for(int c=b;c<=181;++c)
{
if(mypow[a]+mypow[b]+mypow[c]>=N)
break;
for(int e=c;e<=181;++e)
{
int tmp = mypow[a]+mypow[b]+mypow[c]+mypow[e];
if(tmp>=N)
break;
num[tmp]++;
}
}
}
}
}
int main(void)
{
int n;
memset(num,0,sizeof(num));
ini();
while(scanf("%d",&n),n)
{
printf("%d\n",num[n]);
}
return 0;
}