链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1398
题意:
给你17种硬币,面值分别为1²,2²,3²,4²……
询问组成n元有多少种方法
代码:
31 int n; 32 int v[20]; 33 int a[310], b[310], last; 34 35 int main() { 36 rep(i, 0, 18) v[i] = i*i; 37 a[0] = 1; 38 rep(i, 1, 18) { 39 memset(b, 0, sizeof(b)); 40 for (int j = 0; j*v[i] < 310; j++) 41 for (int k = 0; k + j*v[i] < 310; k++) 42 b[k + j*v[i]] += a[k]; 43 memcpy(a, b, sizeof(b)); 44 } 45 while (cin >> n, n) cout << a[n] << endl; 46 return 0; 47 }