BZOJ3622(容斥+dp)
2024-08-25 22:27:04
思路
- “恰k个”考虑求至少k、k+1……个容斥
- 题面说所有数字都不同,可以将所求转化为糖比药多的组数恰为\((n+k)/2\)的方案数
- \(f[i][j]\)数组我觉得更好的理解方式是"前i个已经安排了j组糖大于药、别的先没管"的方案数
- \(f[n][i]*(n-i)!\)即为把其它的安排了以后的方案数,但是这里面有重的
- 设\(g[i]\)为恰i个的方案数。$$g[i]=f[n][i]*(n-i)!-\sum_{j=i+1}ng[j]*C_ji$$要说为什么又去重又剪掉不合法了,我也不通透,目前只是已知这样做是对的话那直观感受一下应该对吧……
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 9;
const int maxn = 2005;
int n, k, m, ans;
int a[maxn], b[maxn];
ll f[maxn][maxn], g[maxn];
ll fac[maxn], C[maxn][maxn];
int READ() {
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)
scanf("%d", &b[i]);
m = (n + k) / 2;
return (n + k) % 2;
}
void PRE() {
sort(a + 1, a + 1 + n);
sort(b + 1, b + 1 + n);
fac[0] = 1;
for (int i = 1; i <= n; i++)
fac[i] = fac[i - 1] * i % mod;
for (int i = 0; i <= n; i++) {
C[i][0] = 1;
for (int j = 1; j <= i; j++)
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
}
}
void DP() {
for (int i = 0; i <= n; i++)
f[i][0] = 1;
for (int i = 1, p = 0; i <= n; i++) {
for (; p < n && b[p + 1] < a[i]; p++);
for (int j = 1; j <= i; j++) {
f[i][j] = (f[i - 1][j - 1] * max(0, p - j + 1) % mod + f[i - 1][j]) % mod;
}
}
for (int i = n; i >= m; i--) {
g[i] = f[n][i] * fac[n - i] % mod;
for (int j = i + 1; j <= n; j++) {
g[i] = (g[i] - g[j] * C[j][i] % mod) % mod;
}
}
ans = (g[m] + mod) % mod;
}
int main() {
if (READ() == 1) {
return !printf("0\n");
}
PRE();
DP();
return !printf("%d\n", ans);
}
最新文章
- C# Math类简介
- mysql support chinese
- Android Bitmap那些事之如何优化内存
- linux下神奇的script命令
- Css溢出隐藏
- Linux中查看是否是固态硬盘(SSD)
- struts2 + jquery 开发环境下的ajax构建方法(action写法 + struts.xml配置 + js调用代码)
- A Game of Thrones(13) - Tyrion
- hibernate在地图的方法之一协会
- javascript动画:velocity.js学习
- 3个人一起写的EI论文可以检索到啦~ -->; Exploring the use of a 3D Virtual Environment in Chinese Cultural Transmission
- */美女镇楼/*>;>;>;---PHP中的OOP-->;面对过程与面对对象基础概念与内容--(封装、继承、多态)
- Javascript URI 解析介绍
- 苹果审核被拒,解析奔溃日志.txt转crash文件
- MyEclipse10或者eclipse中配置开发Python的Pydev插件安装教程
- 关于linux下mysql 5.7.x数据库的yum的安装方法
- Python多线程爬虫
- Python MySQLdb模块连接操作mysql数据库实例_python
- EControl平台测试向生产版本工程切换说明
- 免费获取半年 Bitdefender Total Security 2014
热门文章
- MySQL存储过程示例
- asterisk ss7 ${CALLERID(rdnis)}变量为空问题
- Shell读取文件内容【转】
- BZOJ-4003:城池攻占(可并堆+lazy标记)
- 【Lintcode】106.Convert Sorted List to Balanced BST
- python爬虫知识点总结(三)urllib库详解
- BZOJ1861:[ZJOI2006]书架
- 关于分支和主干Merge时要注意的事项
- SQL Server 将查询的结果生成insert语句
- jvm学习五: 方法执行过程