动态规划
d[s]:组成s值的方法数
d[s]+=d[s-i*i]
#include<bits/stdc++.h>
using namespace std;
#define N 40000
int main()
{
int n;
int d[1<<16][5];
memset(d,0,sizeof(d));
d[0][0]=1;
for(int i=1;i*i<N;i++)
for(int j=1;j<5;j++)
for(int k=i*i;k<N;k++)
d[k][j]+=d[k-i*i][j-1];
while(scanf("%d",&n)!=EOF&&n){
printf("%d\n",d[n][1]+d[n][2]+d[n][3]+d[n][4]);
}
return 0;
}