Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7452 Accepted Submission(s): 5050
2 10 30 0
1 4 27
解题思路:
本题的母函数为 (1+x+x^2+x^3+x^4........) * (1+x^4+x^8+x^12+x^16....) *(1+x^9+x^18+x^27....) * ..............................*(1+x^289+x^(289*2)+..............
1分的硬币有多少个 4分的硬币有多少个 9分的硬币有多少个
这个多了一些限制条件,在母函数模板里改几个地方就可以了。重在理解。
代码:
#include <iostream> using namespace std; int c[302],temp[302],n; int main() { while(cin>>n&&n) { for(int i=0;i<=n;i++) { c[i]=1; temp[i]=0; } for(int i=2;i*i<=n;i++)//i是代表多少个式子相乘,这里i*i<=n的意思是比如要求 x^16次方,第一个式子是以1打头的(1+x+x^2+x^3...),1*x^16,所有的式子中最后一次出现x^16次方的是(1+x^16+x^32..)这是第4个式子。 { for(int j=0;j<=n;j++) for(int k=0;k+j<=n;k+=i*i)//注意 k+=i*i ,因为比如当i等于2时,代表第2个式子1+x^4+x^8+x^12+x^16..,注意指数。 temp[j+k]+=c[j]; for(int i=0;i<=n;i++) { c[i]=temp[i]; temp[i]=0; } } cout<<c[n]<<endl; } return 0; }
[ACM] hdu 1398 Square Coins (母函数),布布扣,bubuko.com
[ACM] hdu 1398 Square Coins (母函数)
原文:http://blog.csdn.net/sr_19930829/article/details/22096395