题意:给出n,求n只有平方数组成的划分
题解:显然n的划分数等于(1+x+x^2+...)*(1+x^4+x^8+...)*(1+x^9+x^16+...)*(1+x^ 的结果中x^n次前的系数
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 200;
int n;
int c1[maxn], c2[maxn];
int main(){
while (~scanf("%d", &n) && n){
for (int i = 0; i <= n; i++){
c1[i] = 1;
c2[i] = 0;
}
for (int i = 2; i * i <= n; i++){
for (int j = 0; j <= n; j++){
for (int k = 0; k + j <= n; k += i * i){
c2[k + j] += c1[j];
}
}
for (int j = 0; j <= n; j++){
c1[j] = c2[j];
c2[j] = 0;
}
}
printf("%d\n", c1[n]);
}
return 0;
}