题面传送门

一道难度中等的 \(dp\)(虽然我没有想出来/kk)。

首先一眼 \(dp_{i,j}\) 表示考虑到第 \(i\) 个学校,第 \(i\) 个学校派出了 \(j\) 个划艇的方案数,转移也异常显然,枚举上一个派出游艇的学校以及它派出的划艇个数,那么有 \(dp_{i,j}=\sum\limits_{k<i}\sum\limits_{l<j}dp_{k,l}\),这样暴力复杂度是 \(n^2A^2\),其中 \(A=\max\{a_i,b_i\}\),可以使用前缀和优化,但照样不能通过,复杂度 \(n^2A\) 或者 \(nA\)。

考虑优化,一个非常简单的想法是离散化,这样值域大小可以降到 \(\mathcal O(n)\),具体来说我们将所有 \(b_i\) 加 \(1\),这样每个学校派出游艇个数的范围就是一个左闭右开的区间 \([a_i,b_i)\),我们将它离散化一下然后用一个数表示一段左开右闭的区间,然后设 \(dp_{i,j}\) 表示到第 \(i\) 个学校,第 \(i\) 个学校派出的游艇个数在第 \(j\) 个区间中的方案数,不过这样就不太好直接按照上面的方式转移了:对于上一个派出游艇的学校,如果它派出的游艇个数不在第 \(j\) 个区间中那倒还好,可以直接加上去,但如果它派出的游艇个数刚好在第 \(j\) 个区间中,那就没啥办法直接计算贡献了。因此我们换个枚举方式:枚举上一个派出了游艇,且派出游艇个数不在第 \(j\) 个区间中的学校 \(k\),以及它派出的游艇个数所在的区间 \(l\),假设第 \(j\) 个区间长度为 \(len\),\((k,l]\) 中有 \(c\) 个学校派出游艇个数取值范围与第 \(j\) 个区间有交,那么方案数就是 \(\sum\limits_{t=0}^{c-1}\dbinom{c-1}{t}\times\dbinom{len}{t+1}=\sum\limits_{t=0}^{c-1}\dbinom{c-1}{c-1-t}\times\dbinom{len}{t+1}\),根据范德蒙德卷积,后面那东西就是 \(\dbinom{c-1+len}{c}\),于是 \(dp_{i,j}=\sum\limits_{k<i}\sum\limits_{l<j}dp_{k,l}\times\dbinom{c-1+len}{c}\),第二维 \(l\) 显然可以前缀和优化掉,复杂度 \(n^3\)。

const int MAXN=500;
const int MOD=1e9+7;
int n,a[MAXN+5],b[MAXN+5],key[MAXN*2+5],cnt=0,uni[MAXN*2+5],num=0;
int dp[MAXN+5],inv[MAXN+5];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i],&b[i]);
key[++cnt]=a[i];key[++cnt]=++b[i];
} sort(key+1,key+cnt+1);
for(int i=1;i<=cnt;i++) if(key[i]^key[i-1]) uni[++num]=key[i];
for(int i=1;i<=n;i++){
a[i]=lower_bound(uni+1,uni+num+1,a[i])-uni;
b[i]=lower_bound(uni+1,uni+num+1,b[i])-uni;
} dp[0]=1;
for(int i=(inv[0]=inv[1]=1)+1;i<=n;i++) inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<num;i++){
int len=uni[i+1]-uni[i];
for(int j=n;j;j--) if(a[j]<=i&&i<b[j]){
for(int k=j-1,cur=len,cnt=1;~k;k--){
dp[j]=(dp[j]+1ll*cur*dp[k])%MOD;
if(a[k]<=i&&i<b[k]) ++cnt,cur=1ll*cur*(len+cnt-1)%MOD*inv[cnt]%MOD;
}
}
} int ans=0;
for(int i=1;i<=n;i++) ans=(ans+dp[i])%MOD;
printf("%d\n",ans);
return 0;
}

洛谷 P3643 - [APIO2016]划艇(dp)的更多相关文章

  1. [洛谷P3643] [APIO2016]划艇

    洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...

  2. 洛谷P3643 [APIO2016]划艇(组合数学)

    题面 传送门 题解 首先区间个数很少,我们考虑把所有区间离散化(这里要把所有的右端点变为\(B_i+1\)代表的开区间) 设\(f_{i,j}\)表示考虑到第\(i\)个学校且第\(i\)个学校必选, ...

  3. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  4. P3643 [APIO2016]划艇

    P3643 [APIO2016]划艇 题意 一个合法序列可表示为一个长度为 \(n\) 的序列,其中第 \(i\) 个数可以为 0 或 \([l_i,r_i]\) 中一个整数,且满足所有不为零的数组成 ...

  5. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  6. NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/9261079.html 题目传送门 - 洛谷P3959 题目传送门 - Vijos P2032 题意 给定一个 ...

  7. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

  8. 洛谷P3928 Sequence2(dp,线段树)

    题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...

  9. 洛谷P1140 相似基因 (DP)

    洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. ...

随机推荐

  1. javascript-jquery选择器

    jquery选择器用来获得jquery对象 我们用一个实例来演示jquery与原生的区别 <div id="title">123</div>原生获得元素的方 ...

  2. JVM:内存结构

    JVM:内存结构 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 程序计数器 虚拟机栈 本地方法栈 堆 方法区 直接内存 1. 程序计数器 1.1 定义 P ...

  3. Java:创建对象小记

    Java:创建对象小记 对 Java 中的创建对象的内容,做一个微不足道的小小小小记 创建对象的方式概述 使用 new 关键字:Person person = new Person(); 反射创建:使 ...

  4. [no code][scrum meeting] Beta 3

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月15日11:30,主持者:肖思炀 下次例会时间:5月16日11:30,主持者:伦泽标 一.工作 ...

  5. 搬运2:早期写的探究printf

    目录: 1. 关于printf格式化输出 2. printf的一般形式 3. 转换说明 4. 格式化输出的意义 5. 转换说明修饰符 6. 修饰符中的标记 7. printf的返回值 ps:共3250 ...

  6. WiFi天线对PCB布局布线和结构的要求详解 - 全文

    随着市场竞争的加剧,硬件设备正以集成化的方向发展.天线也由外置进化内置再进化到嵌入式,我们先来介绍这类应用的天线种类: ⑴ On Board板载式:采用PCB蚀刻一体成型,性能受限,极低成本,应用于蓝 ...

  7. 最详细的windows10系统封装教程

    目录 自定义封装(定制)windows10教程 关于本教程及用到的工具的声明 第一阶段: 封装前的各种环境准备 安装vmware 创建虚拟机 对虚拟机进行分区 配置好BIOS 为虚拟机安装window ...

  8. Mysql 5.7 集群部署,keepalived

    参考文章: https://blog.csdn.net/f18770366447/article/details/80703347 https://www.cnblogs.com/benjamin77 ...

  9. 分布式事务(四)之TCC

    在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈.在分布式领域基于CAP理论以及BASE理论,有人就提出了柔性事务的概念.在业内,关于柔性事务,最主要的有以下四种类型:两阶段 ...

  10. ansible主机组配置及秘钥分发

    ansible主机组配置及秘钥分发 ansible主机组文件位于/etc/ansible/hosts文件中 1 hosts主机经常使用到的变量为: 2 ansible_ssh_host #用于指定被管 ...