[bzoj3622][DP][容斥原理]已经没有什么好害怕的了

2023-10-16 03:38

本文主要是介绍[bzoj3622][DP][容斥原理]已经没有什么好害怕的了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

这里写图片描述

Input

这里写图片描述

Output

这里写图片描述

Sample Input

4 2

5 35 15 45

40 20 10 30

Sample Output

4

HINT

输入的2*n个数字保证全不相同。

还有输入应该是第二行是糖果,第三行是药片

题解

DP呀..
从小到大排序
显然我们要找 n+k2 n + k 2 个糖果比药片大的组合
朴素dp方程,设 f[i][j] f [ i ] [ j ] 表示前 i i 个中找到j个合法组合 其它不管的数量
转移有

f[i][j]=f[i1][j]+f[i1][j1](pos[i]j+1) f [ i ] [ j ] = f [ i − 1 ] [ j ] + f [ i − 1 ] [ j − 1 ] ∗ ( p o s [ i ] − j + 1 )

其中 pos[i] p o s [ i ] 表示 i i 最多能取到哪一位
会有重复
因为
a1>b1 a2>b2 a3>b3
选(a1,b1,a2,b2)和(a1,b1,a3,b3)会被判为两种不同情况
于是设g[i]表示 n n 个钟只有i个合法情况的状态数
转移有
g[i]=f[n][i](ni)!j=i+1ng[j] g [ i ] = f [ n ] [ i ] ∗ ( n − i ) ! − ∑ j = i + 1 n g [ j ]

前面表示只取i个,后面任选
然后去掉比i多的数目的算到i里的东西
就可以了。。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#define mod 1000000009
#define LL long long
using namespace std;
LL pow_mod(LL a,LL b)
{LL ret=1;while(b){if(b&1)ret=ret*a%mod;a=a*a%mod;b>>=1;}return ret;
}
LL inv[2005],pre[2005];
LL C(int n,int m){return pre[n]*inv[m]%mod*inv[n-m]%mod;}
int a[2005],b[2005],n,m,pos[2005];
LL f[2005][2005],g[2005];
void dl(LL &x,LL y){x-=y;if(x<0)x+=mod;}
int main()
{pre[0]=1;for(int i=1;i<=2000;i++)pre[i]=pre[i-1]*i%mod;inv[2000]=pow_mod(pre[2000],mod-2);for(int i=1999;i>=0;i--)inv[i]=inv[i+1]*(i+1)%mod;scanf("%d%d",&n,&m);if((n+m)%2){puts("0");return 0;}m=(n+m)/2;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&b[i]);sort(a+1,a+1+n);sort(b+1,b+1+n);int pa=0;for(int i=1;i<=n;i++){while(b[pa+1]<a[i]&&pa<n)pa++;pos[i]=pa;}f[0][0]=1;for(int i=1;i<=n;i++)for(int j=0;j<=i;j++){if(j!=0)f[i][j]=(f[i-1][j]+f[i-1][j-1]*max(0,pos[i]-j+1))%mod;else f[i][j]=f[i-1][j];}for(int i=n;i>=m;i--){g[i]=f[n][i]*pre[n-i]%mod;for(int j=i+1;j<=n;j++)dl(g[i],g[j]*C(j,i)%mod);}printf("%lld\n",g[m]);return 0;
}

这篇关于[bzoj3622][DP][容斥原理]已经没有什么好害怕的了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

豆包 MarsCode 不允许你还没有女朋友

在这个喧嚣的世界里,爱意需要被温柔地唤醒。为心爱的她制作每日一句小工具,就像是一场永不落幕的浪漫仪式,每天都在她的心田播撒爱的种子,让她的每一天都充满甜蜜与期待。 背景 在这个瞬息万变的时代,我们都在寻找那些能让我们慢下来,感受生活美好的瞬间。为了让这份浪漫持久而深刻,我们决定为女朋友定制一个每日一句小工具。这个工具会在她意想不到的时刻,为她呈现一句充满爱意的话语,让她的每一天都充满惊喜和感动

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上