UOJ#204 【APIO2016】Boat
Time Limit: 70 Sec Memory Limit: 256 MB
Submit: 559 Solved: 248
Description
Input
第一行包括一个整数N,表示学校的数量。接下来N行,每行包括两个正整数,用来描述一所学校。其中第行包括的
Output
输出一行,一个整数,表示所有可能的派出划艇的方案数除以1,000,000,007得到的余数
Sample Input
1 2
2 3
Sample Output
HINT
Source
动态规划
看着题解懵X一个多小时,我这么弱已经没救了吧
枚举数量显然无力,我们得考虑将整段区间一起处理,于是先将区间离散化
将派船看作在限定区间里选一个数,设f[i][j][k]表示当前枚举到第i个学校,最大船数在第j段,这段里选了k个数的方案数。
$ f[i][j][k]=f[i-1][j][k]+f[i-1][j][k-1]* \frac {C(len[j],k)}{C(len[j],k-1)} $
特殊处理 $ f[i][j][1]=f[i-1][j][1] + (\sum_{a=1}^{j-1} \sum_{k=0}^{i-1} f[i-1][a][k] )*len[j] $
第一维可以滚动优化掉
第一个式子的组合数,约分一下变成了(len-k+1)/k ,预处理500以内的逆元即可。
第二个式子用前缀和优化。
然后大概就能过了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int mod=1e9+;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int inv[mxn];
void init(){
inv[]=inv[]=;
for(int i=;i<mxn;i++){
inv[i]= ((-mod/i)*(LL)inv[mod%i]%mod+mod)%mod;
}
return;
}
int n;
int c[mxn][mxn];
struct seg{
int L,R;
}a[mxn];
int pos[mxn],sz=,len[mxn];
int f[mxn][mxn],g[mxn];
int num[mxn];
int main(){
// freopen("boat.in","r",stdin);
// freopen("boat.out","w",stdout);
int i,j;
n=read();
init();
for(i=;i<=n;i++){
a[i].L=read()-;a[i].R=read();
pos[++sz]=a[i].L;pos[++sz]=a[i].R;
}
sort(pos+,pos+sz+);
sz=unique(pos+,pos+sz+)-pos-;
// for(i=1;i<=sz;i++)printf("%d",pos[i]);
for(i=;i<=n;i++){
a[i].L=lower_bound(pos+,pos+sz+,a[i].L)-pos;
a[i].R=lower_bound(pos+,pos+sz+,a[i].R)-pos;
}
for(i=;i<=sz;i++)len[i]=pos[i]-pos[i-];
f[][]=;
for(i=;i<=sz;i++)g[i]=;
for(i=;i<=n;i++){
for(j=a[i].L+;j<=a[i].R;j++){
num[j]++;
for(int k=num[j];k>;k--)
f[j][k]=((LL)f[j][k]+(LL)f[j][k-]*(len[j]-k+)%mod*(LL)inv[k])%mod;
f[j][]=((LL)f[j][]+(LL)g[j-]*len[j]%mod)%mod;
}
for(j=a[i].L+;j<=sz;j++){
g[j]=g[j-];
for(int k=num[j];k;k--){
g[j]=((LL)g[j]+f[j][k])%mod;
}
}
}
g[sz]--;if(g[sz]<=)g[sz]+=mod;
printf("%d\n",g[sz]);
return ;
}
UOJ#204 【APIO2016】Boat的更多相关文章
- UOJ #206. 【APIO2016】Gap
Description Solution 第一个子任务,直接从 \((a[i],a[j])\) 推出 \((a[i+1],a[j-1])\) 就行了,只需要 \(\frac{N+1}{2}\) 第二个 ...
- UOJ#206. 【APIO2016】Gap 构造 交互题
原文链接www.cnblogs.com/zhouzhendong/p/UOJ206.html 题解 T = 1 的情况直接大力从两边向中间询问即可. T = 2 的情况挺妙的,我没想到. 考虑首先花费 ...
- UOJ#206. 【APIO2016】Gap(交互,乱搞)
描述 提交 自定义测试 有 NN 个严格递增的非负整数 a1,a2,…,aNa1,a2,…,aN(0≤a1<a2<⋯<aN≤10180≤a1<a2<⋯<aN≤101 ...
- UOJ #206. 【APIO2016】Gap【交互题】
参考:https://blog.csdn.net/clover_hxy/article/details/70767653 人生第一次交互题...不是很难但是思维和传统题差别挺大的(以及并不会本地测试= ...
- uoj #58. 【WC2013】糖果公园(树上莫队算法+修改操作)
[题目链接] http://uoj.ac/problem/58 [题意] 有一棵树,结点有自己的颜色,若干询问:u,v路径上的获益,并提供修改颜色的操作. 其中获益定义为Vc*W1+Vc*W2+…+V ...
- uoj #5. 【NOI2014】动物园 kmp
#5. [NOI2014]动物园 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/5 Description 近日 ...
- UOJ #148. 【NOIP2015】跳石头 二分
#148. [NOIP2015]跳石头 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/148 Descripti ...
- UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
题目链接 UOJ #7 题解 首先这一定是DP!可以写出: \[f[i] = \min_{ancestor\ j} \{f[j] + (d[j] - d[i]) * p[i] + q[i]\}\] 其 ...
- UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
#17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:// ...
随机推荐
- lintcode-28-搜索二维矩阵
搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1, 3, ...
- iOS- iOS 和 Android 的后台推送原理各是什么?有什么区别?
iOS 的推送iOS 在系统级别有一个推送服务程序使用 5223 端口.使用这个端口的协议源于 Jabber 后来发展为 XMPP ,被用于 Gtalk 等 IM 软件中.所以, iOS 的推送,可以 ...
- 3ds max启动慢怎么办?
有时候启动3ds max的时候一直卡在启动界面进不去怎么办? 在百度上搜到了下面这个解决方案,试了下还真有用: 具体就是进到这个文件夹,然后分别进入第一个和第三个文件夹删掉autodesk ...
- Java、JSP与JavaScript的区别
java和javaScript是两种完全不同的语言,并不是收都有个java就类似 Java,全称应该是 Java Applet,是嵌在网页中,而又有自己独立的运行窗口的小程序.Java Applet ...
- 【Python】安装python包时遇到"error: Microsoft Visual C++ 9.0 is required"的简答
简答 在Windows下用pip安装Scrapy报如下错误, error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall ...
- 【.Net】C#文本文件(.txt)读写
目录 前言 读取txt文件 写入txt文件 前言 计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集.基于Unico ...
- init只创建一次 只有父类的init创建servletContext的对象
init只创建一次 只有父类的init创建servletContext的对象 如果重写父类的方法 但不显示调用父类的init 是不会创建servletContext对象的
- BZOJ 2120 数颜色(树状数组套主席树)
1A啊,激动. 首先,不修改的情况下可以直接用主席树搞,修改的话,直接用主席树搞一次修改的情况下复杂度是O(nlogn)的. 就像你要求区间和一样,用前缀和查询是O(1),修改是O(n),只不过主席树 ...
- bzoj 1797: [Ahoi2009]Mincut 最小割 (网络流)
太神了直接看了hzwer的题解,有个新认识,一条路径上满流的一定是这条路径上所有边的最小值. type arr=record toward,next,cap,from:longint; end; co ...
- 牛客网 提高组第8周 T2 推箱子 解题报告
推箱子 链接: https://ac.nowcoder.com/acm/contest/176/B 来源:牛客网 题目描述 在平面上有\(n\)个箱子,每个箱子都可以看成一个矩形,两条边都和坐标轴平行 ...