母函数模板

来源:互联网 发布:天刀捏脸数据男禁欲 编辑:程序博客网 时间:2024/05/17 02:09

最近做了很多母函数的题,接下来给出能使用大部分题的母函数模板:

#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int c1[1005],c2[1005];int a[15];//硬币的价值int n[15];//硬币的个数int main(){int i,j,k,T,q,w;scanf("%d",&T);while(T--){scanf("%d %d",&w,&q);for(i=1;i<=q;i++){            scanf("%d %d",&a[i],&n[i]);}memset(c1,0,sizeof(c1));memset(c2,0,sizeof(c2));for(i=0;i<=n[1]*a[1];i+=a[1])//初始化c1[i]=1;for(i=2;i<=q;i++)//i表示硬币价值的集合        {            for(j=0;j<=w;j++)                for(k=0;k<=n[i]&&k*a[i]+j<=w;k++)            {                c2[k*a[i]+j]+=c1[j];            }            for(j=0;j<=w;j++)            {                c1[j]=c2[j];                c2[j]=0;            }        }        cout<<c1[w]<<endl;}return 0;}
如果有个数有下限的话,那么在初始化的时候这样写:(n1[]是下限,n2[]是上限)
for(i=n1[1]*a[1];i<=n2[1]*a[1];i+=a[1])//初始化c1[i]=1;

如果对所有的硬币个数有限制的话,就需要把数组再扩大一维,扩大的一维用来放总的硬币个数,代码如下:

#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int c1[255][105],c2[255][105];int a[105];//硬币的价值int ans[255];int main(){        int m,i,j,k,l;        a[1]=1,a[2]=5,a[3]=10,a[4]=25,a[5]=50;        while(~scanf("%d",&m))        {        memset(c1,0,sizeof(c1));        memset(c2,0,sizeof(c2));        memset(ans,0,sizeof(ans));        c1[0][0]=1;        for(i=1;i<=5;i++)//i表示硬币价值的集合        {            for(j=0;j<=m;j++)            for(k=0;k*a[i]+j<=m;k++)            for(l=0;k+l<=100;l++)            {               c2[k*a[i]+j][k+l]+=c1[j][l];            }            for(j=0;j<=m;j++)            for(l=0;l<=100;l++)            {                c1[j][l]=c2[j][l];                c2[j][l]=0;            }        }        for(i=1;i<=m;i++)            for(j=0;j<=100;j++)        {            ans[i]+=c1[i][j];        }        ans[0]=1;        cout<<ans[m]<<endl;     }   return 0;}

1 0
原创粉丝点击