• 选课时间



    title: 选课时间
    tags: [acm,杭电,母函数]

    题目链接

    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
    

    分析

    基础的母函数问题,母函数详解

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int t;
        scanf("%d", &t);
        while (t--)
        {
            vector<int>sum, value;
            int n, k;
            scanf("%d%d", &n, &k);
            for (int i = 0; i < k; i++)
            {
                int a, b;
                scanf("%d%d", &a, &b);
                sum.push_back(b);
                value.push_back(a);
            }
            int c1[n + 1] = {0}, c2[n + 1] = {0};
            for (int i = 0; i <= n && i <= sum[0]*value[0]; i += value[0])
                c1[i] = 1;//x^i 的系数为1   没有合并同类项之前,他们的所有项的系数都是1
      
            for (int i = 1; i < k; i++)//从第二个多项式开始乘
            {
                for (int j = 0; j <= n; j++)
                    for (int k = 0; k + j <= n && k <= value[i]*sum[i]; k += value[i])
                        c2[k + j] += c1[j];//合并同类项  其实是 c2[k+j]+=c2[k]*c1[j] ,但是在还没有合并同类项的的这个多项式里面 x^k的系数都是为1,所以就是  c2[k + j] += c1[j];,有可能在c2里面已经有a*x^(k+j),所以要加上原来的系数a,这样才是合并同类项
                for (int k = 0; k <= n; k++)
                {
    
                    c1[k] = c2[k];
                    c2[k] = 0;
                }
            }
            printf("%d
    ", c1[n]);
        }
        return 0;
    }
    
    /*
    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
    */
    
  • 相关阅读:
    Sublime 官方安装方法
    Notepad2、Sublime_text带图标的右键快捷打开方式
    创业公司如何实施敏捷开发
    如果有人让你推荐编程技术书,请叫他看这个列表
    Spring cron表达式详解
    Spring定时任务的几种实现
    spring注解方式 idea报could not autowire,eclipse却没有问题
    mysql处理海量数据时的一些优化查询速度方法
    Hexo重装小结
    修改JAVA代码,需要重启Tomcat的原因
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/6710374.html
Copyright © 2020-2023  润新知