CodeForces451E Devu and Flowers

2024-04-03 07:32
文章标签 flowers devu codeforces451e

本文主要是介绍CodeForces451E Devu and Flowers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

问题分析

没有想到母函数的做法……

其实直接看题思路挺简单的。发现如果每种花都有无限多的话,问题变得十分简单,答案就是\(s+n-1\choose n - 1\)。然后发现\(n\)只有\(20\),于是大力容斥一波就完事了。

参考代码

#include <cstdio>const long long Max_n = 30;
const long long Mod = 1000000007;
long long n, s, f[ Max_n ];void Exgcd( long long a, long long b, long long & x, long long & y ) {if( b == 0LL ) { x = 1LL; y = 0LL; return; }Exgcd( b, a % b, y, x );y -= a / b * x;return;
}long long Inv( long long a ) {long long x, y;Exgcd( a, Mod, x, y );if( x < 0 ) x += Mod;return x;
}long long C( long long n, long long m ) {long long Ans = 1;for( long long i = 1; i <= m; ++i ) Ans = Ans * ( ( n - i + 1 ) % Mod ) % Mod;for( long long i = 1; i <= m; ++i ) Ans = Ans * Inv( i ) % Mod;return Ans;
}int main() {scanf( "%lld%lld", &n, &s );for( long long i = 1; i <= n; ++i ) scanf( "%lld", &f[ i ] );long long Ans = 0;for( long long i = 0; i < 1 << n; ++i ) {long long t, Cnt = 0, Pos = s;for( t = i; t; t >>= 1 ) if( t & 1 ) ++Cnt;for( long long j = 1, t = i; t; t >>= 1, ++j ) if( t & 1 ) Pos -= f[ j ] + 1;if( Pos < 0 ) continue;Ans += ( Cnt & 1 ) ? -C( Pos + n - 1, n - 1 ) : C( Pos + n - 1, n - 1 );Ans = ( Ans + Mod ) % Mod;}printf( "%lld\n", Ans );return 0;
}

转载于:https://www.cnblogs.com/chy-2003/p/11448933.html

这篇关于CodeForces451E Devu and Flowers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/872281

相关文章

uva 1459 - Flowers Placement(二分图匹配+暴力)

题目链接:uva 1459 - Flowers Placement 暴力,在暴力的基础上用二分图匹配剪枝,如果当前位置放k,导致后面的位置不能匹配,即可回溯。 #include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;const int maxn

POJ 1157 - LITTLE SHOP OF FLOWERS (动态规划)

点击打开链接 WA了两次,因为没看清题目:花是不能不插的! d[i][j] = max ( d[i][j - 1], d[i - 1][j - 1] + a[i][j] ); 表示前i束花,放在前j个花瓶的最大审美数。 // poj 1157 (IOI 1999 - dp)// [6/13/2014 wind]#include <iostream>#include

CF451E: Devu and Flowers(容斥原理 + 考虑反面 + golang组合模版)

题目截图 题目翻译 题目分析 正难则反,考虑所有不符合的例子 由于n很小,所以可以状态压缩二进制遍历完全部不符合例子的组合 对于不符合的例子,假设其中第i个不符合,那么就消耗掉fi + 1个球 以此类推,减剩下s2个球 这时候使用隔板法分给n个箱子,加上n - 1个挡板,就是comb(s2 + n - 1, n - 1) 对于容斥原理,奇偶个数要对应不同的符号,这里需要注意 go代

poj 动态规划DP - 1157 LITTLE SHOP OF FLOWERS

这里有一份DP题目列表点击打开链接,大家想专门刷DP的可以看一下。 我们有不同的花和花瓶,每束花在不同的花瓶里有不同的价值,最后找出价值最大的放花顺序。 动态规划最重要的是找出递推式,我们将每束花在不同花瓶的价值放在data[i][j]里,map[i][j]表示第i束花插在第1-j号花瓶中全局最大的价值,递推式为: map[i][j] = max(map[i-1][j-1]+data[i][

2045第六题 拯救花园 (flowers)

题目大意: 有n只兔子,每只兔子抓回去的时间为ti,回来的时间也是ti,则抓一只兔子要2*ti的时间,di则为每只兔子一个时间单位能吃多少草,用最优方法做的话它们一共吃了多少草(最少) 贪心标准: 我们先把每一只兔子的性价比算出来(di/ti),及在一个时间单位里能阻止吃多少草,如果性价比相同,则根据其他兔子在这只兔子搬运的时间中能吃多少草进行比较 #include <bits/stdc

#数论,组合,容斥原理,lucas定理,乘法逆元#洛谷 CF451E Devu and Flowers

题目 n n n种颜色,每种颜色有 a i a_i ai​枝花,现挑出 m m m朵,使没有颜色完全相同的方案 分析 可以发现,这道题是求多重集的组合数,根据容斥原理也就是 C k + r − 1 k − 1 − ∑ i = 1 k C k + r − n i − 2 k − 1 + ∑ 1 ≤ i &lt; j ≤ k C k + r − n i − n j − 3 k − 1 −

Codeforces740B. Alyona and flowers

思路 对于选取的下标区间l <=x <=r;如果 Σsubarray[x]>0,就选取这个区间,否则不选 #include<bits/stdc++.h>using namespace std;int a[105];vector<int> b[105];int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int

hdu 4614——Vases and Flowers

线段树 线段树太渣了,看别人代码恶补下。http://www.cnblogs.com/aukle/archive/2013/07/26/3217639.html #include<iostream>#include<cstdio>using namespace std;#define maxn 50010#define ls (rt<<1)#define rs (rt<<1|1)#

【Codeforces Round 340 (Div 2)C】【暴力排序枚举】Watering Flowers 2个灌溉器灌溉所有点最小的rr+RR

C. Watering Flowers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A flowerbed has many flowers and two fountains. You

Flowers树状数组+离散化

题意:给你一些花,以及这些花开花的时间,问你在某一时间开花的总个数~~,很明显的树状数组题,插线问点。。 AC代码: #include<cstdio>#include<string.h>#include<string>#include<algorithm>#include<iostream>#define N 1000005using namespace std;typede