hdu2082 找单词母函数(易懂)

Cindy ·
更新时间:2024-09-21
· 970 次阅读

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2082

母函数定义这些这里就不说了,要注意一点,小白的我坑了好久,别的博客都是举例1克 2克 3克 4克硬币各一个的例子,注意如果是2个3元的硬币的因式应该是(1+x的三次+x的6次),而不是(1+2倍x的三次),代码核心为三个循环,首先n1[0]代表1乘以26个式子,最外面循环的i<=26代表与第几个式子相乘,第二层的循环j代表被乘数中对应j次的系数,(2x3表示3个2,其中2是被乘数,3是乘数),最内层k*i表示乘数中对应的阶数的系数,都为1其实。内两层结束代表26个因式中第i个已经乘完,n2赋值给n1;然后n2清零。
最后一个循环相加就是所有的方案和。

#include int main(){ int T; scanf("%d",&T); while(T--){ int le[27],n1[55]={0},n2[55]={0}; int sum=0; for(int i=1;i<=26;i++) scanf("%d",&le[i]); n1[0]=1; for(int i=1;i<=26;i++){ for(int j=0;j<=50;j++) for(int k=0;k<=le[i]&&k*i+j<=50;k++) n2[j+k*i]=n2[j+k*i]+n1[j]; for(int j=0;j<=50;j++){ n1[j]=n2[j]; n2[j]=0; } } for(int i=1;i<=50;i++) sum=sum+n1[i]; printf("%d\n",sum); } return 0; }

手推前面2个i
手推前面2个i


作者:qq_41009768



hdu 函数 单词

需要 登录 后方可回复, 如果你还没有账号请 注册新账号