【SOJ-2680】dollars变形

来源:互联网 发布:黑米软件有用吗 编辑:程序博客网 时间:2024/05/19 17:06

求一个数能被平方数组合的种数

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循环是各个币值能换多少钱的结果,切记