题面传送门

一道难度中等的 \(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. 初学Python-day10 函数2

    函数 1.函数也是一种数据 函数也是一种数据,可以使用变量保存 回调函数(参数的值还是一个函数) 实例: def test(): print('hello world') def test1(a): ...

  2. 【Java虚拟机7】ClassLoader源码文档翻译

    前言 学习JVM类加载器,ClassLoader这个类加载器的核心类是必须要重视的. Notes:下方蓝色文字是自己的翻译(如果有问题请指正).黑色文字是源文档.红色文字是自己的备注. ClassLo ...

  3. MySQL复习(一)MySQL架构

    MySQL架构 MySQL采用的是C/S架构,我们在使用MySQL的时候,都是以客户端的身份,发送请求连接到运行服务端的MySQL守护进程,而MySQL服务器端则根据我们的请求进行处理并把处理后的结果 ...

  4. Git: 搭建一个本地私人仓库

    Git: 搭建一个本地私人仓库 寝室放个电脑.实验室也有个电脑 为进行数据同步,充分利用实验室的服务器搭建了个本地私人仓库 1. 安装流程 当然首先保证服务器上与PC机上都已经安装了可用的Git 在P ...

  5. [对对子队]事后总结Beta

    设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 要做一个游戏,定义的很清楚,实现出来的效果贴近定义,对用户和场景有清晰描述 我们达到目标了么(原计划的功 ...

  6. Scrum Meeting 14

    第14次例会报告 日期:2021年06月07日 会议主要内容概述: 汇报了已完成的工作,明确了下一步目标,正在努力赶进度. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wi ...

  7. 初步认识express,并创建web服务器,挂载静态资源

    1.Express简介 1.1什么是Express 官方给出的概念:Express 是基于 Node.js 平台,快速.开放.极简的 Web 开发框架,官方网址 相似用途:Express 的作用和 N ...

  8. 羽夏看Win系统内核——保护模式篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  9. ELK集群之grafana(8)

    Grafana的安装和读取ES数据 模拟es数据产生sjgtest.py import time import datetime from elasticsearch import Elasticse ...

  10. mongodb安装教程(一)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/fengtingYan/article/de ...