求一个数能被平方数组合的种数
int main()
{
ll i, j;
ll d[1000];
for (i = 1; i < 200; ++i) {
if (i * i <= 1000) {
d[i] = i * i;
} else {
break;
}
}
ll ans[1005] = {0};
ans[0] = 1;
for (i = 1; i <= 31; ++i) {
for (j = 1; j <= 1000; ++j) {
if (j - d[i] < 0) continue;
ans[j] += ans[j - d[i]];
}
}
ll n;
while (cin>>n, n) {
cout<<ans[n]<<endl;
}
return 0;
}
如10
10 = 4 + 4 + 1 + 1;
10 = 9 + 1
10 = 1 + 1 + … + 1
10 = 4 + 1 + 1 + … + 1;
所以答案是4
一定记住,dollars第一个for循环是币值
第二个for循环是各个币值能换多少钱的结果,切记