zoukankan      html  css  js  c++  java
  • BZOj 3208 食物 生成函数+广义二项式定理

    曾经搞过几天的生成函数,也没做几道题,后来放弃了,今天讲了生成函数和背包问题的结合,趁着脑子清醒整理一下;

    题目描述:

    明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 
    我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。 
    他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等 
    当然,他又有一些稀奇古怪的限制: 
    每种食物的限制如下: 
    承德汉堡:偶数个 
    可乐:0个或1个 
    鸡腿:0个,1个或2个 
    蜜桃多:奇数个 
    鸡块:4的倍数个 
    包子:0个,1个,2个或3个 
    土豆片炒肉:不超过一个。 
    面包:3的倍数个

    注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。

    输入样例1 

    输出样例1 
    1

    输入样例2 

    输出样例2 
    35 
    数据范围 
    对于40%的数据,1<=N<=100000; 
    对于所有数据,1<=n<=10^500;

    对于小数据范围的,我们显然可以用dp的背包问题处理,那么对于本题这么大的范围,我们该怎么处理呢,这就要用生成函数搞一下了;

    我们讲每一个要求编号;

    对于1.偶数个:生成函数是1+$x^2$+$x^4$+$x^6$+$x^8$+...=$frac{1}{1-$x^2$}$

    对于2:1+x;

    对于3:1+x+$x^2$=$frac{1+$x^3$}{1-x}$;

    算了我搞不了博客园的公式,还是搞图片吧;

    来自ppt,其实每一个式子都很好推导;

    对于式子七等,我们可以采取先求多项式的逆元,再将其化简的方法会比较方便;

    那么这个题目就是让我们求f(x)的第n-1项,为什么是n-1呢,因为分子上的x相当于一个位移的作用;

    那么我们探讨一下(1-x)-4的第[n]项系数怎么求;有两种思路;

    第一种:广义二项式定理;

    对于负数的情况,如下;

    那么答案十分显然,我们将其展开,就是C(3,n+2)

    第二种思路:对于这个母函数的第n项的系数,相当于不定方程x1+x2+x3+...+xn=4的非负整数解的个数,

    这个问题可以用组合数学中的插板法解决,答案也为C(3,n+2);

    注意:这里的n是已经减过1的n;

     

  • 相关阅读:
    MySQL 内存溢出
    使用pt-fifo-split 工具往mysql插入海量数据
    Summary: Calculate average where sum exceed double limits
    Pocket Gem OA: Log Parser
    Pocket Gem OA: Path Finder
    Leetcode: Sliding Window Median
    Leetcode: Number Complement
    FB面经 Prepare: Even Tree
    FB面经 Prepare: All Palindromic Substrings
    FB面经 Prepare: Largest Island
  • 原文地址:https://www.cnblogs.com/Tyouchie/p/11188353.html
Copyright © 2011-2022 走看看