【BZOJ4584】[Apio2016]赛艇 DP
【BZOJ4584】[Apio2016]赛艇
Description
Input
第一行包括一个整数N,表示学校的数量。接下来N行,每行包括两个正整数,用来描述一所学校。其中第行包括的两个正整数分别表示Ai,Bi(1<=Ai<=Bi<=10^9),N<=500
Output
输出一行,一个整数,表示所有可能的派出划艇的方案数除以1,000,000,007得到的余数
Sample Input
1 2
2 3
Sample Output
题解:一开始设的是二维状态,显然不可做啊。。。
先离散化得到2*n个区间,然后用f[i][j][k]表示前i个学校,最后一个学校的数量在第j个区间中,并且第j个区间中已经有k个数的方案数。
如果上一个学校与当前学校不再同一个区间,那么我们维护s[j]表示$\sum\limits_{l<j}f[i][l][..]$,那么直接用s更新f即可。如果上一个学校与当前学校在同一个区间,那么这个区间中的方案数显然是一个组合数,维护一下组合数就好了。
如果采用01背包式的枚举顺序,在空间上可以省掉一维。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll P=1000000007;
int n,m;
ll ans;
int A[510],B[510],siz[1010];
ll ref[1010],f[1010][510],s[1010],ine[510];
struct node
{
int val,org;
}num[1010];
bool cmp(node a,node b)
{
return a.val<b.val;
}
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd();
int i,j,k;
for(i=1;i<=n;i++) num[i].val=rd()-1,num[i].org=i,num[i+n].val=rd(),num[i+n].org=i;
sort(num+1,num+2*n+1,cmp);
for(i=1;i<=2*n;i++)
{
if(i==1||num[i].val>num[i-1].val) ref[++m]=num[i].val;
if(!A[num[i].org]) A[num[i].org]=m+1;
else B[num[i].org]=m;
}
ine[1]=1;
for(i=2;i<=n;i++) ine[i]=P-(P/i)*ine[P%i]%P;
for(i=1;i<=n;i++)
{
for(s[0]=1,j=1;j<=B[i];j++)
{
s[j]=s[j-1];
for(k=1;k<=siz[j];k++) s[j]=(s[j]+f[j][k])%P;
}
for(j=B[i];j>=A[i];j--)
{
siz[j]=min(ref[j]-ref[j-1],siz[j]+1ll);
for(k=siz[j];k>=2;k--) f[j][k]=(f[j][k]+f[j][k-1]*(ref[j]-ref[j-1]-k+1)%P*ine[k])%P;
f[j][1]=(f[j][1]+s[j-1]*(ref[j]-ref[j-1]))%P;
}
}
for(i=1;i<=m;i++) for(j=1;j<=siz[i];j++) ans=(ans+f[i][j])%P;
printf("%lld",ans);
return 0;
}
【BZOJ4584】[Apio2016]赛艇 DP的更多相关文章
- BZOJ4584 APIO2016赛艇(动态规划+组合数学)
如果值域不大,容易想到设f[i][j]为第i个学校选了j的方案数,枚举上一个学校是哪个选了啥即可,可以前缀和优化.于是考虑离散化,由于离散化后相同的数可能可以取不同的值,所以枚举第一个和其所选数(离散 ...
- BZOJ4584 : [Apio2016]赛艇
首先将值域离散化成$O(n)$个连续段. 设$f[i][j][k]$表示第$i$个学校派出的数量在第$j$个连续段,在第$j$个连续段一共有$k$个学校的方案数.用组合数以及前缀和转移即可. 时间复杂 ...
- BZOJ 4584 luogu P3643: [Apio2016]赛艇
4584: [Apio2016]赛艇 Time Limit: 70 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在首尔 ...
- bzoj 4584: [Apio2016]赛艇【dp】
参考:https://www.cnblogs.com/lcf-2000/p/6809085.html 设f[i][j][k]为第i个学校派出的赛艇数量在区间j内,并且区间j内共有k个学校的方案数 把数 ...
- APIO2016赛艇
首先每个学校的边界范围是\(1e9\),肯定不能直接\(dp[i][j]\)表示前i所学校,第\(i\)所学校派出\(j\)艘船,但\(b<=500\)所有考虑把\(a,b\)离散,第二维改为当 ...
- BZOJ 4584 [Apio2016]赛艇 ——动态规划
Subtask 1 直接$N^2$ $DP$,就可以了 Subtask 2 用$f[i][j]$表示当前位置为$i$,结束元素为$j$的方案数. Subtask 3 看下面 Subtask 4 首先可 ...
- 校际联合Contest
每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 2017FJ省队集训 游记
2017FJ省队集训 游记 又是一篇流水账 Day 1 今天是省队集训的第一天.早上骑车去八中,到的时候汗流太多浑身湿透被杨哥哥和runzhe2000 d了,一个说我去游泳了一个说我打球了...流完汗 ...
随机推荐
- oracle经验小节2
1,instr 函数 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置. 语法如下: instr( string1, string2 [, start_position ...
- 基于DDD的.NET开发框架-DDD经典分层
DDD核心思想是由业务问题来控制解决方案的形式从以数据库为中心过渡到领域模型为中心 下面这个图是我在<领域驱动设计与模式实战>书中拍下来的,他完全诠释DDD的经典分层. 程序代码中也是响应 ...
- (MVC)从客户端中检测到有潜在危险的 Request.Form 值
在传统的.net Request验证中 ,只需要在WebConfig HttpRuntime节点 加入 RequestValidateMode 属性,值为2.0(此处2.0并非Framework版本) ...
- Heap 3214 LIS题解
依据问题转换成最长不降子序列问题. 10^9的输入数据计算起来还是挺花时间的.由于这里仅仅能使用O(nlgn)时间复杂度了. 只是证明是能够算出10^9个数据的. 由于时间限制是5s. #includ ...
- OZ Report 오즈 리포트 개발
//这只单元格数据颜色 if( (int)getattr("caption") > 100) setattr("bgcolor", "$0,0, ...
- NanoHttpd
NanoHttpd是个很强大的开源库,仅仅用一个Java类,就实现了一个轻量级的 Web Server,可以非常方便地集成到Android应用中去,让你的App支持 HTTP GET, POST, P ...
- oracle中exists 和 in 的区别
1)用IN select * from A where id in(select id from B); 以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.注意,是缓存 ...
- c++ friend 遇到 namespace 无法访问 private 成员的问题
相关的文章(比较有意思,记录一下):http://www.cnblogs.com/lx20030303/archive/2012/09/21/2696258.html 先看例子.如下. 尝试编译的话, ...
- jsp中跳出循环
<c:otherwise> <c:set var="flag" value="true" /><!-- 设置flag --> ...
- hive2.1.1配置
hive2.1.1配置 首先在conf下复制hive-site.xml <property> <name>javax.jdo.option.ConnectionURL</ ...