P4859-已经没有什么好害怕的了【容斥,dp】
正题
题目链接:https://www.luogu.com.cn/problem/P4859
题目大意
两个长度为\(n\)的序列\(a,b\)两两匹配,求\(a_i>b_i\)的组数比\(a_i<b_i\)的组数多\(k\)的方案数。
保证输入数字两两不同
解题思路
其实就是求恰好有\(\frac{n+k}{2}\)种\(a_i>b_i\)的匹配方案。
先设\(f_{i,j}\)表示到\(a\)的第\(i\)个,已经选择了\(j\)组的方案。转移起来比较麻烦,我们不知道\(b\)中选了哪些。
把\(a\)和\(b\)排序后,设\(l_i\)表示一个最大的数字使得\(a_i>b_{l_i}\),然后就可以\(dp\)了
\]
之后发现我们很难固定其他配对的大小,可以考虑容斥,设\(g_i\)表示至少有\(i\)对满足\(a_i>b_i\)的方案,那么有\(g_i=f_i\times (n-i)!\)。
然后就可以直接容斥了,因为\(g_i\)中有\(\binom{i}{k}\)中方案选出\(k\)个配对满足,所以容斥系数就是\((-1)^{i-k}\binom{i}{k}\)
答案就是
\]
时间复杂度\(O(n^2)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2100,P=1e9+9;
ll n,k,C[N][N],a[N],b[N],f[N][N],g[N],l[N],ans;
signed main()
{
scanf("%lld%lld",&n,&k);
if((n+k)&1)return puts("0")&0;
k=(n+k)/2;C[0][0]=1;
for(ll i=1;i<=n;i++)
for(ll j=0;j<=i;j++)
C[i][j]=(C[i-1][j]+(j?C[i-1][j-1]:0))%P;
for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);
sort(a+1,a+1+n);sort(b+1,b+1+n);
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++)
if(b[j]<a[i])l[i]=j;
else break;
f[0][0]=1;
for(ll i=1;i<=n;i++)
for(ll j=0;j<=n;j++)
f[i][j]=(f[i-1][j]+(j?f[i-1][j-1]*max(l[i]-j+1,0ll)%P:0))%P;
for(ll i=n,s=1;i>=0;i--,s=s*(n-i)%P)g[i]=f[n][i]*s%P;
for(ll i=k;i<=n;i++){
ll tmp=g[i]*C[i][k]%P;
(ans+=((i-k)&1)?P-tmp:tmp)%=P;
}
printf("%lld\n",ans);
return 0;
}
P4859-已经没有什么好害怕的了【容斥,dp】的更多相关文章
- 【BZOJ3622】已经没有什么好害怕的了 容斥+DP
[BZOJ3622]已经没有什么好害怕的了 Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output ...
- [BZOJ3622]已经没有什么好害怕的了(容斥DP)
给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数. 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到. 首 ...
- BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)
题目链接 (Luogu) https://www.luogu.org/problem/P4859 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...
- P4859 已经没有什么好害怕的了(dp+二项式反演)
P4859 已经没有什么好害怕的了 啥是二项式反演(转) 如果你看不太懂二项式反演(比如我) 那么只需要记住:对于某两个$g(i),f(i)$ ---------------------------- ...
- 题解-洛谷P4859 已经没有什么好害怕的了
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...
- 洛谷 P4859 已经没有什么好害怕的了 解题报告
已经没有什么好害怕的了 题目描述 已经使\(\tt{Modoka}\)有签订契约,和自己一起战斗的想法后,\(\tt{Mami}\)忽然感到自己不再是孤单一人了呢. 于是,之前的谨慎的战斗作风也消失了 ...
- bzoj 3622 已经没有什么好害怕的了 类似容斥,dp
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1213 Solved: 576[Submit][Status][ ...
- bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1033 Solved: 480[Submit][Status][ ...
- 【BZOJ3622】已经没有什么好害怕的了(动态规划,容斥)
[BZOJ3622]已经没有什么好害怕的了(动态规划,容斥) 题面 BZOJ 题解 很明显的,这类问题是要从至少变成恰好的过程,直接容斥即可. 首先我们要求的是(糖果>药片)=(药片>糖果 ...
随机推荐
- 查看node.js全局安装的插件路径
查看 npm 全局插件 默认全局安装路径 参考:https://www.jianshu.com/p/f2873fcef5aa 首先 nodejs安装好之后,默认情况下会有如下配置 npm confi ...
- Qt简单的解析Json数据例子(一)
要解析的json的格式为: { "rootpath": "001", "usernum": 111, "childdep" ...
- 【java虚拟机】垃圾回收机制详解
作者:平凡希 原文地址:https://www.cnblogs.com/xiaoxi/p/6486852.html 一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分 ...
- 玩转Spring生命周期之Lifecycle
Lifecycle callbacks Initialization callbacks.Destruction callbacks要与容器的bean生命周期管理交互,即容器在启动后和容器在销毁前对每 ...
- Oracle基本用法(一)
一.简介 数据库:Oracle数据库的概念和其他数据库不一样,这里的数据库是一个操作系统只有一个库,可以看做Oracle就是一个大的数据库. 实例:一个Oracle实例有一系列的后台进程和内存结构组成 ...
- JSP编码问题
JSP的开头内容: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 ...
- unity优化 — UGUI纹理格式的选择
首次界面打开加载的资源(如 贴图)会被缓存在内存中,再次打开界面由于内存中已有了资源 所以会更快.如何让首次打开界面会更快呢? 图片是否进行了有效的压缩.Android 平台下不带透明通道 优先使用E ...
- cmd关闭端口占用
netstat -nao |findStr "8080" taskkill /pid 15406 /f
- CentOS_Server with GUI入门
安装模式: Server with GUI:基本的桌面系统,包括常用的桌面软件,如文档查看工具 Minimal:基本的系统,不含有任何可选的软件包 Basic Server :安装的基本系统的平台支持 ...
- CSS截取字段,让过长的字段结尾变成省略号(IE有效)
text-overflow:ellipsis;overflow:hidden;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti ...