P3643-[APIO2016]划艇【dp】
正题
题目链接:https://www.luogu.com.cn/problem/P3643
题目大意
求有多少个\(n\)个数的序列\(x\)满足,\(x_i\in \{0\}\cup[a_i,b_i]\)且非\(0\)数递增。
解题思路
会发现\(a_i,b_i\)很大不能太暴力的将第二维的\(dp\)设为上一个选了的数是多少。
可以考虑离散化,会将整个数轴分成最多\(2n-1\)个区间,但是这样我们就不能确定上个数字具体在哪里了。\(n\)比较小,所以我们可以考虑一种比较合理的方法就先确定这个区间中有多少个数然后再用组合数算出这个区间的方案。
设\(f_{i,j}\)表示到第\(i\)个数(并且这个数不是\(0\))在第\(j\)个区间时的方案,若从\(f_{k,l}(k<i,l<j)\)转移过来,也就是在\([k+1,i]\)的数要么在\(j\)这个区间内,要么是\(0\)。若区间\(j\)的长度为\(len\),\([k+1,i]\)中的数能选到区间\(j\)的数的个数为\(c\)(当然\(i\)一定要能选到),此时的方案数应该是\(\binom{len+c}{c}\)。
可以理解为我们要在\([0,len]\)这个范围内选出\(c\)个数使得非\(0\)数递增,那么我们让前面是\(1\sim len\),然后在最后面放\(c\)个\(0\),此时选到\(0\)的位置就表示这个位置是\(0\),否则就按选择的非零数填到后面没有选择的\(0\)的位置。
那么现在就有转移
\]
后面那个前缀和优化一下时间复杂度就能到\(O(n^3)\)了,写起来细节有一点多。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1010,P=1e9+7;
ll n,a[N],b[N],p[N],inv[N],fac[N];
ll ans,f[N][N],g[N][N];
int main()
{
// printf("%d",sizeof(f)>>20);
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
scanf("%lld%lld",&a[i],&b[i]);
p[i]=a[i];b[i]++;p[i+n]=b[i];
}
inv[1]=1;
for(ll i=2;i<=n;i++)
inv[i]=P-(P/i)*inv[P%i]%P;
inv[0]=1;
for(ll i=1;i<=n;i++)
inv[i]=inv[i-1]*inv[i]%P;
sort(p+1,p+1+2*n);
ll m=unique(p+1,p+1+2*n)-p-1;
for(ll i=0;i<m;i++)g[0][i]=1;
for(ll i=1;i<=n;i++){
for(ll j=1;j<m;j++){
if(p[j]>=a[i]&&p[j+1]<=b[i]){
ll l=p[j+1]-p[j];fac[0]=1;
for(ll k=1;k<=n;k++)
fac[k]=fac[k-1]*(l+k-1)%P;
for(ll k=i-1,c=1;k>=0;k--){
(f[i][j]+=fac[c]*inv[c]%P*g[k][j-1]%P)%=P;
if(p[j]>=a[k]&&p[j+1]<=b[k])c++;
}
}
g[i][j]=(g[i][j-1]+f[i][j])%P;
}
}
for(int i=1;i<=n;i++)
(ans+=g[i][m-1])%=P;
printf("%lld\n",ans);
return 0;
}
P3643-[APIO2016]划艇【dp】的更多相关文章
- P3643 [APIO2016]划艇
P3643 [APIO2016]划艇 题意 一个合法序列可表示为一个长度为 \(n\) 的序列,其中第 \(i\) 个数可以为 0 或 \([l_i,r_i]\) 中一个整数,且满足所有不为零的数组成 ...
- [洛谷P3643] [APIO2016]划艇
洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...
- 洛谷 P3643 - [APIO2016]划艇(dp)
题面传送门 一道难度中等的 \(dp\)(虽然我没有想出来/kk). 首先一眼 \(dp_{i,j}\) 表示考虑到第 \(i\) 个学校,第 \(i\) 个学校派出了 \(j\) 个划艇的方案数,转 ...
- [组合][DP]luogu P3643 [APIO2016]划艇
题面 https://www.luogu.com.cn/problem/P3643 对于一个序列,第i项可取的值在{0}∪[ai,bi]之间,求使序列非零部分单调递增的方案数 分析 设 $f[i][j ...
- 题解 P3643 [APIO2016]划艇
题解 一种思路很好想:\(f_{i,j}\) 表示前 \(i\) 所学校中,第 \(i\) 所学校参赛且派出 \(j\) 艘划艇的方案数.(转移就不列了.) 这种方式有一个致命点,就是 \(j\) 的 ...
- 洛谷P3643 [APIO2016]划艇(组合数学)
题面 传送门 题解 首先区间个数很少,我们考虑把所有区间离散化(这里要把所有的右端点变为\(B_i+1\)代表的开区间) 设\(f_{i,j}\)表示考虑到第\(i\)个学校且第\(i\)个学校必选, ...
- BZOJ4584 & 洛谷3643 & UOJ204:[APIO2016]划艇——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4584 https://www.luogu.org/problemnew/show/P3643 ht ...
- BZOJ 4584 luogu P3643: [Apio2016]赛艇
4584: [Apio2016]赛艇 Time Limit: 70 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在首尔 ...
- 【BZOJ4584】[Apio2016]赛艇 DP
[BZOJ4584][Apio2016]赛艇 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都拥有若干艘划艇.同一所学校的所 ...
- [APIO2016]划艇
题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 NNN 个划艇学校,编号依次为 111 到 NNN.每个学校都拥有若干艘划艇.同一所学校的所有划艇颜色相同,不同的学校的划艇 ...
随机推荐
- 转载自-阮一峰-测试框架 Mocha 实例教程
测试框架 Mocha 实例教程 作者: 阮一峰 日期: 2015年12月 3日 Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏 ...
- C#协作试取消线程
https://segmentfault.com/q/1010000017109927using System; using System.Collections.Generic; using Sys ...
- C++继承体系中的内存分段
---------------综述与目录-------------- 讨论这个问题之前我们先明确类的结构,一个类的大概组成,下面的很多分类名词都是我个人杜撰,为的就是让读者看懂能够区分,下面分别分类: ...
- WPF---数据绑定之ValidationRule数据校验综合Demo(七)
一.概述 我们利用ValidationRule以及ErrorTemplate来制作一个简单的表单验证. 二.Demo 核心思想:我们在ValidationRule中的Validate函数中进行验证, ...
- 【ArcEngine】AE连接SDE_For_SQLServer参数设置
SDE for sqlserver直连的ArcEngine访问 Ae中的数据的连接实质还是采用服务连接的方式.连接代码如下: 1 public IWorkspace Getworkspace() 2 ...
- File--字节流--字符流
File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.构造方法 public File(String pathname) :通过将给定 ...
- mybatis传入参数为0被误认为是空字符串的解决方法
在mbatis中使用Xml配置sql语句时,出现了这样一个问题.当我传入的参数为0去做判断时,mybatis会把参数0当成是空字符串去判断而引起查询结果错误 所以在做项目时一定要注意,用到MyBati ...
- Java Web基础 --- Servlet 综述(理论篇)
摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Ser ...
- Linux centos 安装 mysql 5.7
一.mysql下载 1.方式一(简单粗暴) 直接在linux 目录下:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-l ...
- 程序挂了之后别再跟我说让我帮你重启啦! 让supervisor帮你搞定...
目录 有啥用? 安装 生成配置文件 启动supervisor 自定义配置文件 控制命令 求关注啦 有啥用? 很多我们项目排期进入联调.测试阶段,如果QA同学是直接跟你要一个后端环境的话,那简单点大概率 ...