• [ACM] hdu 2079 选课时间(普通型母函数)


    Problem Description
    又到了选课的时间了,xhd看着选课表发呆,为了想让下一学期好过点,他想知道学n个学分共有多少组合。你来帮帮他吧。(xhd认为一样学分的课没区别)
     


     

    Input
    输入数据的第一行是一个数据T,表示有T组数据。
    每组数据的第一行是两个整数n(1 <= n <= 40),k(1 <= k <= 8)。
    接着有k行,每行有两个整数a(1 <= a <= 8),b(1 <= b <= 10),表示学分为a的课有b门。
     


     

    Output
    对于每组输入数据,输出一个整数,表示学n个学分的组合数。
     


     

    Sample Input
    2 2 2 1 2 2 1 40 8 1 1 2 2 3 2 4 2 5 8 6 9 7 6 8 8
     


     

    Sample Output
    2 445
     


     

    Author
    xhd
     


     

    Source


     

    代码:

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    int c[45],temp[45];
    int a[11],b[11];
    
    int main()
    {
        int t;cin>>t;
        int n,k;
        while(t--)
        {
            cin>>n>>k;
            for(int i=1;i<=k;i++)
                cin>>a[i]>>b[i];
            for(int i=0;i<=n;i++)
            {
                c[i]=0;
                temp[i]=0;
            }
            c[0]=1;
            for(int i=1;i<=k;i++)
            {
                for(int j=0;j<=n;j++)
                    for(int k=0;k+j<=n&&k<=b[i]*a[i];k+=a[i])//第i种学分的课总的学分(即指数)
                {
                    temp[j+k]+=c[j];
                }
                for(int j=0;j<=n;j++)
                {
                    c[j]=temp[j];
                    temp[j]=0;
                }
            }
            cout<<c[n]<<endl;
        }
        return 0;
    }
    

  • 相关阅读:
    hdu1002
    hdu1008
    hdu1000
    fzu2089
    hdu1003
    hdu1004
    HDU1019
    《那些年啊,那些事——一个程序员的奋斗史》——87
    《那些年啊,那些事——一个程序员的奋斗史》——83
    《那些年啊,那些事——一个程序员的奋斗史》——89
  • 原文地址:https://www.cnblogs.com/sr1993/p/3697922.html
Copyright © 2020-2023  润新知