母函数的三个应用+总结

//母函数的应用 ac两道基本+想通两种变式
//不写完,不睡觉

//0:27写完啦 1A 写个小小总结

//1.element0~n-1 任意个:直接套模板
//2.element是特定元素的集合 个数任意:定义一个数组并初始化。元素无规律,下标有规律
//3.element特定 个数有限制:用结构体数组存特定元素和个数 注意细节

//给出另一个排列组合问题的背景:
//盒子里取球,n种不同颜色,各有ai个。求一次取m个的可能结果数
//只需求出x^m 即为答案(p.s.相同颜色的认为都相同,否则x^i带有系数)
#include<cstdio>
using namespace std;
const int N = 8000;
int c1[N+10],c2[N+10];
struct ele{
int v,num;
}a[5];
int n,m,p;

int main(){
a[1].v=1,a[2].v=2,a[3].v=5;
while(scanf("%d%d%d",&n,&m,&p)==3&&!(m==0&&n==0&&p==0)){
a[1].num=n,a[2].num=m,a[3].num=p;
for(int i=0;i<=N;i++){
c1[i]=0,c2[i]=0; //init()
}
for(int i=0;i<=n;i++){
c1[i]=1; //一元coin限制为n个
}
for(int i=2;i<=3;i++){ //三种coin 下标
for(int j=0;j<=N;j++){
for(int k=0;k<=a[i].v*a[i].num;k+=a[i].v){//第i种coin用完了 c2括号结束
c2[j+k]+=c1[j];
}
}
for(int k=0;k<=N;k++){
c1[k]=c2[k],c2[k]=0;
}
}
for(int i=0;i<=N+1;i++){
if(c1[i]==0){
printf("%d\n",i);
break;
}
}
}
return 0;
}

posted @ 2021-03-28 13:11  starlightlmy  阅读(83)  评论(0)    收藏  举报