BZOJ 4584 【APIO2016】 赛艇
题目链接:赛艇
讲道理好好的Boat为啥要翻译成赛艇呢……题面中不也是划艇么……
这道题考虑一下dp。由于划艇数量过于庞大,所以肯定不能直接记录到dp状态中。所以一个想法就是把数量离散化,然后把每个学校的数量在哪一段内记录下来。也就是说\(f_{i,j,k}\)表示前\(i\)个学校,第\(i\)所学校派出的划艇数量在区间\(j\)内,并且区间\(j\)内共有\(k\)个学校的方案数。然后分类讨论一下转移:
当\(k\ne 1\)时,有:
\begin{aligned}
f_{i,j,k} &=\frac{C(len_j,k)}{C(len_j,k-1)}\sum_{i'=0}^{i-1}f_{i',j,k-1} \\
&=\frac{len_j-k+1}{k}\sum_{i'=0}^{i-1}f_{i',j,k-1}
\end{aligned}
当\(k=1\)时,有:
\begin{aligned}
f_{i,j,k}=\sum_{i'=0}^{i-1}\sum_{j'=0}^{j-1}\sum_{k'=0}^{i'}f_{i',j',k'}
\end{aligned}
于是前缀和优化即可。可以发现记录两个前缀和之后\(f\)数组没必要记录了。时间复杂度\(O(n^3)\),空间复杂度\(O(n^2)\)。
下面贴代码(常数略大):
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define N 510
#define mod 1000000007 using namespace std;
typedef long long llg; int le[N],ri[N],n,ni[N],d[N<<1],ld;
llg s1[N][N<<1],s2[N<<1][N]; void gi(int &x){x=lower_bound(d+1,d+ld+1,x)-d;}
int mi(llg a,int b){
llg s=1;
while(b){
if(b&1) s=s*a%mod;
a=a*a%mod; b>>=1;
}
return s;
} int main(){
File("a");
scanf("%d",&n); ni[0]=1;
for(int i=1;i<=n;i++){
scanf("%d %d",&le[i],&ri[i]);
d[++ld]=le[i],d[++ld]=++ri[i];
ni[i]=mi(i,mod-2);
}
sort(d+1,d+ld+1); ld=unique(d+1,d+ld+1)-d-1;
for(int i=1;i<=n;i++) gi(le[i]),gi(ri[i]);
for(int i=0;i<=ld;i++) s1[0][i]=1;
for(int i=1,x,y;i<=n;i++){
for(int j=ri[i]-1;x=d[j+1]-d[j],j>=le[i];j--){
for(int k=min(x,i);k>1;k--){
y=s2[j][k-1]*ni[k]%mod*(x-k+1)%mod;
(s1[i][j]+=y)%=mod,(s2[j][k]+=y)%=mod;
}
y=s1[i-1][j-1]*x%mod;
(s1[i][j]+=y)%=mod,(s2[j][1]+=y)%=mod;
}
s1[i][0]=1;
for(int j=1;j<=ld;j++){
s1[i][j]+=s1[i-1][j]+s1[i][j-1];
(s1[i][j]-=s1[i-1][j-1])%=mod;
if(s1[i][j]<0) s1[i][j]+=mod;
}
}
printf("%lld",(s1[n][ld]+mod-1)%mod);
return 0;
}
BZOJ 4584 【APIO2016】 赛艇的更多相关文章
- bzoj 4584: [Apio2016]赛艇【dp】
参考:https://www.cnblogs.com/lcf-2000/p/6809085.html 设f[i][j][k]为第i个学校派出的赛艇数量在区间j内,并且区间j内共有k个学校的方案数 把数 ...
- BZOJ 4584 [Apio2016]赛艇 ——动态规划
Subtask 1 直接$N^2$ $DP$,就可以了 Subtask 2 用$f[i][j]$表示当前位置为$i$,结束元素为$j$的方案数. Subtask 3 看下面 Subtask 4 首先可 ...
- 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 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都拥有若干艘划艇.同一所学校的所 ...
- LOJ 2567: 洛谷 P3643: bzoj 4584: 「APIO2016」划艇
题目传送门:LOJ #2249. 题意简述: 有 \(n\) 个位置,第 \(i\) 个位置可以填在 \([a_i,b_i]\) (\(1\le a_i\le b_i\le 10^9\))之间的整数, ...
- BZOJ4584 APIO2016赛艇(动态规划+组合数学)
如果值域不大,容易想到设f[i][j]为第i个学校选了j的方案数,枚举上一个学校是哪个选了啥即可,可以前缀和优化.于是考虑离散化,由于离散化后相同的数可能可以取不同的值,所以枚举第一个和其所选数(离散 ...
- BZOJ4584 : [Apio2016]赛艇
首先将值域离散化成$O(n)$个连续段. 设$f[i][j][k]$表示第$i$个学校派出的数量在第$j$个连续段,在第$j$个连续段一共有$k$个学校的方案数.用组合数以及前缀和转移即可. 时间复杂 ...
- APIO2016赛艇
首先每个学校的边界范围是\(1e9\),肯定不能直接\(dp[i][j]\)表示前i所学校,第\(i\)所学校派出\(j\)艘船,但\(b<=500\)所有考虑把\(a,b\)离散,第二维改为当 ...
- bzoj 4585: [Apio2016]烟火表演【左偏树】
参考:https://blog.csdn.net/wxh010910/article/details/55806735 以下课件,可并堆部分写的左偏树 #include<iostream> ...
随机推荐
- (2018干货系列十一)最新iOS学习路线整合
怎么学iOS iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础 ...
- Spring5源码解析-Spring框架中的单例和原型bean
Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...
- 通过 Java 线程堆栈进行性能瓶颈分析
改善性能意味着用更少的资源做更多的事情.为了利用并发来提高系统性能,我们需要更有效的利用现有的处理器资源,这意味着我们期望使 CPU 尽可能出于忙碌状态(当然,并不是让 CPU 周期出于应付无用计算, ...
- eclipse 的版本及下载地址
eclipse 的各个版本号: 版本号 代号 代号名 发布日期 Eclipse 3.1 IO 木卫一,伊奥 2005 Eclipse 3.2 Callisto 木卫四,卡里斯托 2006 Eclips ...
- K8S学习笔记之修改K8S的api-server证书
K8S的api-server证书包含很多IP和域名,有时候后期才发现证书内有错误,需要重新生成该证书. 修改server-csr.json,修改后基于原来的ca证书重新生成server.perm s ...
- 深入理解softmax函数
Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值.Softmax模型可以用来给不同的对象分配概率.即使在之后,我们训练更加精细 ...
- Java线程池详解,看这篇就够了!
构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?Runnable和Callable的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段. 基础知识 Execu ...
- Getting started with Kaggle -- Kaggle Competitions
1: The Competition We'll be learning how to generate a submission for a Kaggle competition. Kaggle i ...
- 思维导图软件 xMind 基本用法
官方下载:https://www.xmind.net/download/win/ 官方快捷键说明:https://www.xmind.net/blog/cn/tag/xmind%EF%BC%8C%E5 ...
- 20145204张亚军——web安全基础实践
web安全基础实践 实验后回答问题 1.SQL注入原理,如何防御 SQL注入:就是通过把SQL命令插入到"Web表单递交"或"输入域名"或"页面请求& ...