【BZOJ3622】已经没什么好害怕的了 容斥原理+dp
Description
.jpg)
Input
.jpg)
Output
.jpg)
Sample Input
4 2
5 35 15 45
40 20 10 30
Sample Output
4
HINT
.jpg)
输入的2*n个数字保证全不相同。
还有输入应该是第二行是糖果,第三行是药片
Sol
先把两个数组排序,能够把题目的分析难度降低一些。
然后我们求出\(r[i]\)表示b中小于\(a[i]\)的最靠右的位置,这样dp的时候就能够\(O(1)\)转移了。
设\(f[i][j]\)表示考虑了i位,至少有j个满足a>b的方案数。
显然\(f[i][j]=f[i-1][j]+f[i-1][j-1]*max(0,r[i]-j+1)\)。
这样的方案数是“至少”,我们需要求的是“恰好”,所以需要容斥一波。
设\(g[i]\)表示恰好i个的方案数,那么我们的计算方法就是用全部情况减去不合法的情况。
显然全部情况是\(f[n][i]*(n-i)!\),阶乘就表示剩下的可以任意选择。
然后我们需要减去的是:\(\sum_{j=i+1}^{n}g[j]*C(j,i)\)
这个式子的意义是:对于每个恰好是j的方案的排列中,任意选择i个数字的方案数,也就是不合法的总方案数。
Code
#include <bits/stdc++.h>
using namespace std;
int n,m,a[2005],b[2005],f[2005][2005],g[2005],d[2005]={1},c[2005][2005],r[2005],P=1e9+9;
int main()
{
scanf("%d%d",&n,&m);m=(m+n)>>1;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);sort(a+1,a+n+1);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);sort(b+1,b+n+1);
for(int i=1,j=1;i<=n;r[i]=j-1,i++) for(;j<=n&&b[j]<a[i];j++);
for(int i=0,j;i<=2000;i++) for(c[i][0]=1,j=1;j<=i;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%P;
for(int i=1;i<=2000;i++) d[i]=1ll*d[i-1]*i%P;
for(int i=0;i<=n;i++) f[i][0]=1;
for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) f[i][j]=(f[i-1][j]+1ll*f[i-1][j-1]*max(r[i]-j+1,0)%P)%P;
for(int i=n,j;i>=m;i--) for(g[i]=1ll*f[n][i]*d[n-i]%P,j=i+1;j<=n;j++) g[i]=(g[i]-1ll*c[j][i]*g[j]%P+P)%P;
printf("%d\n",g[m]);
}
【BZOJ3622】已经没什么好害怕的了 容斥原理+dp的更多相关文章
- 洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 ...
- BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]
3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...
- [BZOJ3622]已经没有什么好害怕的了:DP+容斥原理
分析 说白了就是一道先DP再二项式反演的水题,然后被脑残博主把"多\(k\)组"看成了"糖果比药片能量大的组数恰好为\(k\)组",还改了各种奇怪的地方,最后看 ...
- BZOJ3622 已经没有什么好害怕的了 【dp + 二项式反演】
题目链接 BZOJ3622 题解 既已开题 那就已经没有什么好害怕的了 由题目中奇怪的条件我们可以特判掉\(n - k\)为奇数时答案为\(0\) 否则我们要求的就是糖果大于药片恰好有\(\frac{ ...
- BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)
题目链接 (Luogu) https://www.luogu.org/problem/P4859 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...
- [CF245H] Queries for Number of Palindromes (容斥原理dp计数)
题目链接:http://codeforces.com/problemset/problem/245/H 题目大意:给你一个字符串s,对于每次查询,输入为一个数对(i,j),输出s[i..j]之间回文串 ...
- P4859 已经没有什么好害怕的了(dp+二项式反演)
P4859 已经没有什么好害怕的了 啥是二项式反演(转) 如果你看不太懂二项式反演(比如我) 那么只需要记住:对于某两个$g(i),f(i)$ ---------------------------- ...
- 2018.07.13 [HNOI2015]落忆枫音(容斥原理+dp)
洛谷的传送门 bzoj的传送门 题意简述:在DAG中增加一条有向边,然后询问新图中一共 有多少个不同的子图为"树形图". 解法:容斥原理+dp,先考虑没有环的情况,经过尝试不难发现 ...
- TC SRM498 Div1 1000PT(容斥原理+DP)
[\(Description\)] 网格中每步可以走\((0,\cdots M_x,0\cdots M_y)\)中任意非零向量,有\(K\)种向量不能走,分别是\((r_1,r_1),(r_2,r_2 ...
随机推荐
- Java面向对象-构造方法,this关键字
Java面向对象-构造方法,this关键字 构造方法 概念:构造方法是一个特殊的方法,这个特殊方法用于创建实例时执行初始化操作: 上代码: package com.java1234.chap03.se ...
- 服务器实现处理GET和POST
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...
- javascipt——原型
1.原型存在的意义 JS不是面向对象的语言,没有类的概念,但是提供了构造器函数,其也可以创建一个对象.构造器函数如下: function people(name, age, sex) { this.n ...
- jquery-uploadify传参方法
jquery-uploadify传参方法$(document).ready(function () { $("#uploadify").uploadify({ 'uploader' ...
- Java微信公众平台开发(四)--回复消息的分类及实体的创建
转自:http://www.cuiyongzhi.com/post/42.html 前面有说道对接收到微信服务器消息后对消息的分类,当时主要分为普通消息和事件消息,这里我们要讲述的是我们在给用户回复的 ...
- JavaScript 18岁生日快乐
12月4日是JS的18岁生日,18年前这个日子JavaScript由Netscape和Sun联合宣布推出.那个星期,Ruby也将推出其第一个版本. 今天Netscape和Sun都已经不在了,但是JS还 ...
- 第一篇 UCOS介绍
第一篇 UCOS介绍 这个大家都知道.呵呵.考虑到咱们学习的完整性还是在这里唠叨一下.让大家再熟悉一下.高手们忍耐一下吧! uC/OS II(Micro Control Operation Syste ...
- PHP数据结构之五 栈的PHP的实现和栈的基本操作
栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表. 栈栈在计算机的实现有多种方式:硬堆栈:利用CPU中的某些寄存器组或类似的硬件或使用内存的特殊区域来实现.这类 ...
- shelve和hashlib模块
一.shelve模块 shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. 注意: shelve模块封装了pickle模块,,允许 ...
- zookeeper介绍及集群的搭建(利用虚拟机)
ZooKeeper ZooKeeper是一个分布式的,开放源码(apache)的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase.dubbox.kaf ...