大致题意:

从n个盒子里面取出s多花。每一个盒子里面的花都同样,而且每一个盒子里面花的多数为f[i],求取法总数。

解题思路:

我们知道假设n个盒子里面花的数量无限,那么取法总数为:C(s+n-1, n-1) = C(s+n-1, s)。

能够将问题抽象成:x1+x2+...+xn = s, 当中0<=xi <= f[i]。求满足条件的解的个数。

两种方法能够解决问题:

方法一:这个问题的解能够等价于:mul = (1+x+x^2+...+x^f[1])*(1+x+x^2+...+x^f[2])*...*(1+x+x^2+...+x^f[n])中x^s项的系数。而 (1+x+x^2+...+x^f[i]) = (1-x^(1+f[i]))/(1-x),那么mul = (1-x^(1+f[1]))*(1-x^(1+f[2]))*...*(1-x^(1+f[n]))*(1-x)^(-n)。

对于 (1-x^(1+f[1]))*(1-x^(1+f[2]))*...*(1-x^(1+f[n]))这部分的系数。因为n非常小,直接暴力(2^n)枚举计算各项的系数。

对于(1-x)^(-n)的系数,(1-x)^(-n) = (1/(1-x))^n, 而1/(1-x) = 1 + x + x^2 + ... + x^n + ...,无穷级数。那么(1-x)^(-n) = (1+x+x^2+...+x^m+...)^n,要求这个式子x^s项的系数,就相当于从n个盒子(花的数量无限)里面去s朵花,求取法总数。于是(1-x)^(-n)中x^s项的系数为:C(s+n-1, n-1)。

知道这两部分的系数以后问题就迎刃而解了。

方法二:容斥原理。

设A1 = {x1 >= f[1]+1}, A2 = {x2 >= f[2]+1}, ..., An = {xn >= f[n]+1}, 全集S = (n+s-1, s)。那么问题的解集为:全集减去不符合条件的解集(某个Ai为真)。 不符合条件的解集能够用容斥原理来解决。即:。

暴力枚举(2^n)Ai的状态,假设Ai为真,则s -= (f[i]+1)。那么这样的状态下,解的为题相当于从n个盒子里面取s(减去该状态下全部f[i]+1以后的值)朵花,盒子花的数目没有限制,解的个数为C(s+n-1, n-1)。

Codeforces #258 Div.2 E Devu and Flowers的更多相关文章

  1. Codeforces Round #258 (Div. 2) E. Devu and Flowers 容斥

    E. Devu and Flowers 题目连接: http://codeforces.com/contest/451/problem/E Description Devu wants to deco ...

  2. Codeforces Round #258 (Div. 2)E - Devu and Flowers

    题意:n<20个箱子,每个里面有fi朵颜色相同的花,不同箱子里的花颜色不同,要求取出s朵花,问方案数 题解:假设不考虑箱子的数量限制,隔板法可得方案数是c(s+n-1,n-1),当某个箱子里的数 ...

  3. Codeforces Round #258 (Div. 2)[ABCD]

    Codeforces Round #258 (Div. 2)[ABCD] ACM 题目地址:Codeforces Round #258 (Div. 2) A - Game With Sticks 题意 ...

  4. Codeforces Round #258 (Div. 2) 小结

    A. Game With Sticks (451A) 水题一道,事实上无论你选取哪一个交叉点,结果都是行数列数都减一,那如今就是谁先减到行.列有一个为0,那么谁就赢了.因为Akshat先选,因此假设行 ...

  5. Codeforces 451E Devu and Flowers(容斥原理)

    题目链接:Codeforces 451E Devu and Flowers 题目大意:有n个花坛.要选s支花,每一个花坛有f[i]支花.同一个花坛的花颜色同样,不同花坛的花颜色不同,问说能够有多少种组 ...

  6. Codeforces Round #258 (Div. 2) 容斥+Lucas

    题目链接: http://codeforces.com/problemset/problem/451/E E. Devu and Flowers time limit per test4 second ...

  7. Codeforces Round #258 (Div. 2)

    A - Game With Sticks 题目的意思: n个水平条,m个竖直条,组成网格,每次删除交点所在的行和列,两个人轮流删除,直到最后没有交点为止,最后不能再删除的人将输掉 解题思路: 每次删除 ...

  8. Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

    http://blog.csdn.net/rowanhaoa/article/details/38116713 A:Game With Sticks 水题.. . 每次操作,都会拿走一个横行,一个竖行 ...

  9. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

随机推荐

  1. Oracle TIMESTAMP的处理

    public class Test { private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-M ...

  2. ZOJ Problem Set - 3229 Shoot the Bullet 【有上下界网络流+流量输出】

    题目:problemId=3442" target="_blank">ZOJ Problem Set - 3229 Shoot the Bullet 分类:有源有汇 ...

  3. oh-my-zsh upgrade problem

    Oh-My-ZSH upgrade issue with bad substitution message   Any problem with automatic Oh-My-Zsh upgrade ...

  4. Gym - 100625J Jailbreak 最短路+搜索

    http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...

  5. PHP写文件到指定位置

    <?php $fp = fopen("output.json", "r+"); $flag = fseek($fp, -3, SEEK_END); if( ...

  6. Python(二) 表示‘组’的概念与定义

    现实世界中总存在一组一组的事物, 一.列表的定义 type(['hello','world',1,9,True,False]) = <class 'list'> type([[1,2,3, ...

  7. 1sting

    You will be given a string which only contains ‘1’; You can merge two adjacent ‘1’ to be ‘2’, or lea ...

  8. Thinkpad Access Connections实现快速的在各种网络间进行切换

    Thinkpad Access Connections快速的在各种网络间进行切换 因为工作的原因要经常在多个无线或有线之间切换,每次要切换到不同的固定IP地址的网络更是一种折磨,换一次就要从新输入一次 ...

  9. 如何批量ping地址查看网络是否畅通

    测试环境搬迁后,需要批量去ping所有机器的IP,看网络是否畅通 测试思路: [weblogic@pays03pre_BankVerify luyantest]$ ping -c 1 172.29.1 ...

  10. HDU 2883 kebab

    kebab Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 2883 ...