Codeforces #258 Div.2 E Devu and Flowers
2014-07-27 14:34
232 查看
大致题意:
从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
)中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
))*(1-x)^(-n)。
对于 (1-x^(1+f[1]))*(1-x^(1+f[2]))*...*(1-x^(1+f
))这部分的系数,由于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
+1}, 全集S = (n+s-1, s)。那么问题的解集为:全集减去不符合条件的解集(某个Ai为真), 不符合条件的解集可以用容斥原理来解决,即:
![](http://img.my.csdn.net/uploads/201407/27/1406442495_9535.png)
。
暴力枚举(2^n)Ai的状态,如果Ai为真,则s -= (f[i]+1);那么这种状态下,解的为题相当于从n个盒子里面取s(减去该状态下所有f[i]+1以后的值)朵花,盒子花的数目没有限制,解的个数为C(s+n-1, n-1)。
从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
)中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
))*(1-x)^(-n)。
对于 (1-x^(1+f[1]))*(1-x^(1+f[2]))*...*(1-x^(1+f
))这部分的系数,由于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
+1}, 全集S = (n+s-1, s)。那么问题的解集为:全集减去不符合条件的解集(某个Ai为真), 不符合条件的解集可以用容斥原理来解决,即:
![](http://img.my.csdn.net/uploads/201407/27/1406442495_9535.png)
。
暴力枚举(2^n)Ai的状态,如果Ai为真,则s -= (f[i]+1);那么这种状态下,解的为题相当于从n个盒子里面取s(减去该状态下所有f[i]+1以后的值)朵花,盒子花的数目没有限制,解的个数为C(s+n-1, n-1)。
相关文章推荐
- Codeforces Round #258 E Devu and Flowers --容斥原理
- Codeforces Round #341 Div.2 C. Wet Shark and Flowers
- Codeforces#258 (Div.2) E - Devu and Flowers 容斥
- codeforces Devu and Flowers 母函数 容斥 dp
- Codeforces #341 C. Wet Shark and Flowers 概率论
- Codeforces Round #190 (Div. 2) B. Ciel and Flowers
- Codeforces Round 389 Div.2 B. Santa Claus and Keyboard Check(模拟)
- Codeforces #280 Div.2 E.Vanya and Field 数学,数论
- Codeforces Round #190 DIV.2 A. Ciel and Dancing
- Dima and Salad -----codeforces # 214 div.2
- Codeforces Round 389 Div.2 B. Santa Claus and Keyboard Check(模拟)
- Codeforces Round 261 Div.2 E Pashmak and Graph --DAG上的DP
- Codeforces Round 389 Div.2 B. Santa Claus and Keyboard Check(模拟)
- Codeforces #370 (Div.2) B. Memory and Trident【思维】
- Codeforces Round #261 (Div. 2)B. Pashmak and Flowers(容易)
- CodeForces #419 Div.2 B Karen and Coffee 差分 巧妙
- Codeforces Round 389 Div.2 B. Santa Claus and Keyboard Check(模拟)
- Codeforces Round 421 Div.2 D. Mister B and PR Shifts 思维 乱搞
- Codeforces Round #430(Div.2)Problem C Ilya And The Tree(DFS)
- Codeforces Round #251 (Div. 2) D. Devu and his Brother