首页 > 其他 > 详细

母函数法解决选课问题

时间:2019-10-06 23:53:51      阅读:112      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#include<string.h>
#include <windows.h>

int c[45],s[45];
int a[8],b[8];
int main()
{
    int T,i,j,t,n,k;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&n,&k);
        memset(a,0,sizeof(a));
        memset(s,0,sizeof(s));
        for(i=0;i<k;i++)
        scanf("%d%d",&a[i],&b[i]);
        for(i=0;i<=n&&i<=a[0]*b[0];i+=a[0])
        s[i]=1;      //将第一组数据的系数全部初始化为1
        for(i=1;i<k;i++)                                //i从1开始因为第一次性解决了两项,第二次直接从第三项开始
        {
            for(j=0;j<=n&&j<=a[i-1]*b[i-1];j+=a[i-1])    //j+=a[i-1]为了减少一些不必要的计算||j<=a[i-1]*b[i-1]
            {
                for(t=0;t+j<=n&&t<=a[i]*b[i];t+=a[i])
                c[j+t]+=s[j];                            //j代表前一项的指数,t代表后一项的指数 c[j+t]+=s[j]表示两者相乘时的系数相加
            }
            for(j=0;j<=n;j++)
            {
                s[j]=c[j];  
                c[j]=0;
            }
        }
        printf("%d\n",s[n]);
    }
    system("pause");
    return 0;
} 

 

母函数法解决选课问题

原文:https://www.cnblogs.com/z2529827226/p/11628846.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!