不太理解

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
const int inf = 0x3f3f3f3f;//1061109567
typedef long long ll;
const int maxn = 40000;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int dp[maxn][5];
int main()
{
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i=1; i*i<maxn; i++)
{
for(int j=1; j<5; j++)
{
for(int k=i*i; k<maxn; k++)
{
if(k == 25 && j == 2)
printf("%d %d\n",i,dp[k-i*i][j-1]);
dp[k][j] += dp[k-i*i][j-1];
}
}
}
int n;
while(scanf("%d",&n) && n)
{
int sum = dp[n][1] + dp[n][2] + dp[n][3] + dp[n][4];
printf("aa%d\n",dp[9][1]);
printf("bb%d\n",dp[16][1]);
printf("%d\n",dp[n][2]);
printf("%d\n",sum);
}
return 0;
}