【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)
3622: 已经没有什么好害怕的了
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 683 Solved: 328Description
Input
Output
Sample Input
4 2
5 35 15 45
40 20 10 30Sample Output
4HINT
输入的2*n个数字保证全不相同。
还有输入应该是第二行是糖果,第三行是药片Source
【分析】
もう何も怖くない
首先n+k为奇特判无解。
然后知道要选多少组ai>bj的
然后就选吧。
先两个都排一遍序
$f[i][j]$表示选了a的前$i$组后有$j$组$ai>bj$的,的方案数。
这个很简单好吗!!(我昨天晚上看这题时候绝对脑抽)
$f[i][j]=f[i-1][j]+f[i-1][j-1]*(mx[i]-j+1)$ 剩下的先不用管,后面乱排乘一个阶乘
$mx[i]$表示最多前$mx[i]$个$b$数组小于$a[i]$
但是!!不能保证刚好就等于你要的组数,可能大于它。于是容斥大法就来了。
$dp[i]=f[n][i]*(n-i)!-dp[j]*C[j][i] (j>i)$
组合数也递推就好了。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 2010
#define Mod 1000000009
#define LL long long LL mymax(LL x,LL y) {return x>y?x:y;} LL a[Maxn],b[Maxn],f[Maxn][Maxn],mx[Maxn],dp[Maxn],p[Maxn];
LL c[Maxn][Maxn]; int main()
{
LL n,k;
scanf("%lld%lld",&n,&k);
if((n+k)&) printf("0\n");
else
{
k=(n+k)/;
for(LL i=;i<=n;i++) scanf("%lld",&a[i]);
for(LL i=;i<=n;i++) scanf("%lld",&b[i]);
sort(a+,a++n);
sort(b+,b++n);
LL st=;
for(LL i=;i<=n;i++)
{
while(a[i]>b[st+]&&st<n) st++;
mx[i]=st;
}
memset(f,,sizeof(f));
for(int i=;i<=n;i++) f[i][]=;
for(LL i=;i<=n;i++)
for(LL j=;j<=i;j++)
{
f[i][j]=(f[i-][j]+f[i-][j-]*mymax(mx[i]-j+,))%Mod;
}
for(LL i=;i<=n;i++) c[i][]=;
for(LL i=;i<=n;i++)
for(LL j=;j<=i;j++)
{
c[i][j]=(c[i-][j]+c[i-][j-])%Mod;
}
p[]=;
for(LL i=;i<=n;i++) p[i]=(p[i-]*i)%Mod;
for(LL i=n;i>=k;i--)
{
dp[i]=(f[n][i]*p[n-i])%Mod;
for(LL j=i+;j<=n;j++)
{
dp[i]=dp[i]-c[j][i]*dp[j];
dp[i]=(dp[i]%Mod+Mod)%Mod;
}
}
printf("%lld\n",dp[k]);
}
return ;
}
もう何も怖くない(呵呵
2017-04-06 14:16:58
【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)的更多相关文章
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- BZOJ 3622 : 已经没有什么好害怕的了(dp + 广义容斥原理)
今天没听懂 h10 的讲课 但已经没有什么好害怕的了 题意 给你两个序列 \(a,b\) 每个序列共 \(n\) 个数 , 数之间两两不同 问 \(a\) 与 \(b\) 之间有多少配对方案 使得 \ ...
- BZOJ - 3622:已经没有什么好害怕的了 (广义容斥)
[BZOJ3622]已经没有什么好害怕的了 Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output ...
- 【bzoj 3622】已经没有什么好害怕的了
题目 看到这个数据范围就发现我们需要一个\(O(n^2)\)的做法了,那大概率是\(dp\)了 看到恰好\(k\)个我们就知道这基本是个容斥了 首先解方程发现我们需要使得\(a>b\)的恰好有\ ...
- BZOJ - Problem 3622 - 已经没有什么好害怕的了
题意: 给定两个序列$a$和$b$,让它们进行匹配,求出使得$a_i > b_j$的个数比$a_i < b_j$的个数恰好多$k$,求这样的匹配方法数 题解: 这题的各种表示有一点相似又截 ...
- bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1033 Solved: 480[Submit][Status][ ...
- [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)
[BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...
随机推荐
- 【CodeForces】578 C. Weakness and Poorness
[题目]C. Weakness and Poorness [题意]给定含n个整数的序列ai,定义新序列为ai-x,要使新序列的最大子段和绝对值最小,求实数x.n<=2*10^5. [算法]二分| ...
- 浅谈Stein算法求最大公约数(GCD)的原理及简单应用
一.Stein算法过程及其简单证明 1.一般步骤: s1:当两数均为偶数时将其同时除以2至至少一数为奇数为止,记录除掉的所有公因数2的乘积k: s2:如果仍有一数为偶数,连续除以2直至该数为奇数为止: ...
- 【leetcode 简单】第三十八题 两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值( ...
- 数据库与sql注入的相关知识
数据库与sql注入的相关知识 sql语句明显是针对数据库的一种操作,既然想通过sql注入的方法来拿取数据那么就要先了解一下如何的去操作数据库,这方面并不需要对数据库有多么的精通但是如果了解掌握了其中的 ...
- C++之C/C++内存对齐
一.什么是字节对齐,为什么要对齐 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这 ...
- C 中级 - SO_REUSEPORT 和 SO_REUSEADDR
引言 - 问题由来 刚开始学习网络编程时候, 常听到一个词, 先开启 "端口复用 SO_REUSEADDR". 那时很一知半解, 就知道该那么写了. 心里一直有些奇怪, 语义不通呀 ...
- mysql 创建数据库的时候选择 utf8 bin 和 utf8 ci的区别
utf8 ci 不区分大小写: utf8 bin 区分大小写:
- List基本用法
List最为Collection接口的子接口,当然可以使用Collection接口里的全部方法.而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法: public c ...
- Gitlab部署及汉化操作
一.简介 GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. GitLab拥有与Github类似的功能 ...
- Linux 基础——文件搜索命令find
一.find命令的好处 有时会经常在目录下找文件或目录的具体存放在哪,但是该目录下的文件又很多不好找出.这时并不需要手动查看所有的文件,用find命令来帮助查找就行了.所以文件或目录一定归好类,存放有 ...
.jpg)
.jpg)
.jpg)
.jpg)