参考:https://www.cnblogs.com/lcf-2000/p/6809085.html

设f[i][j][k]为第i个学校派出的赛艇数量在区间j内,并且区间j内共有k个学校的方案数

把数量区间离散化,转移是:

当k==1

\[f_{i,j,k}=\sum_{i'=1}^{i-1}\sum_{j'=1}^{j-1}\sum_{k'=1}^{i'}f_{i',j',k'}
\]

否则

\[f_{i,j,k}=C_{len_j}^k\frac{\sum_{i'=1}^{i-1}f_{i',j,k}}{C_{len_j}^{k-1}}
\]

\[f_{i,j,k}=\frac{C_{len_j}^k}{C_{len_j}^{k-1}}\sum_{i'=1}^{i-1}f_{i',j,k}
\]

\[f_{i,j,k}=\frac{len_j-k+1}{k}\sum_{i'=1}^{i-1}f_{i',j,k}
\]

然后这个空间是不行的,所以用二维前缀和优化

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<map>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=1005,mod=1e9+7;
  7. int n,l[N],r[N],inv[N],g[N],tot,has,h[N],f[N][N],s[N][N];
  8. map<int,int>mp;
  9. int read()
  10. {
  11. int r=0,f=1;
  12. char p=getchar();
  13. while(p>'9'||p<'0')
  14. {
  15. if(p=='-')
  16. f=-1;
  17. p=getchar();
  18. }
  19. while(p>='0'&&p<='9')
  20. {
  21. r=r*10+p-48;
  22. p=getchar();
  23. }
  24. return r*f;
  25. }
  26. inline void add(int &x,int y)
  27. {
  28. x+=y;
  29. if(x>=mod)
  30. x-=mod;
  31. }
  32. int main()
  33. {
  34. n=read();
  35. inv[1]=1;
  36. for(int i=2;i<=n;i++)
  37. inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
  38. inv[0]=1;
  39. for(int i=1;i<=n;i++)
  40. {
  41. l[i]=read(),r[i]=read()+1;
  42. g[++tot]=l[i],g[++tot]=r[i];
  43. }
  44. sort(g+1,g+1+tot);
  45. for(int i=1;i<=tot;i++)
  46. if(i==1||g[i]!=g[i-1])
  47. mp[g[i]]=++has,h[has]=g[i];
  48. for(int i=1;i<=n;i++)
  49. l[i]=mp[l[i]],r[i]=mp[r[i]];
  50. for(int i=0;i<=has;i++)
  51. f[0][i]=1;
  52. for(int i=1,x,y;i<=n;i++)
  53. {
  54. for(int j=r[i]-1;x=h[j+1]-h[j],j>=l[i];j--)
  55. {
  56. for(int k=min(x,i);k>1;k--)
  57. {
  58. y=1ll*s[j][k-1]*inv[k]%mod*(x-k+1)%mod;
  59. add(f[i][j],y);
  60. add(s[j][k],y);
  61. }
  62. y=1ll*f[i-1][j-1]*x%mod;
  63. add(f[i][j],y);
  64. add(s[j][1],y);
  65. }
  66. f[i][0]=1;
  67. for(int j=1;j<=has;j++)
  68. {
  69. add(f[i][j],(f[i-1][j]+f[i][j-1])%mod);
  70. f[i][j]=(f[i][j]-f[i-1][j-1])%mod;
  71. if(f[i][j]<0)
  72. f[i][j]+=mod;
  73. }
  74. }
  75. printf("%d\n",(f[n][has]+mod-1)%mod);
  76. return 0;
  77. }

bzoj 4584: [Apio2016]赛艇【dp】的更多相关文章

  1. BZOJ 4584 [Apio2016]赛艇 ——动态规划

    Subtask 1 直接$N^2$ $DP$,就可以了 Subtask 2 用$f[i][j]$表示当前位置为$i$,结束元素为$j$的方案数. Subtask 3 看下面 Subtask 4 首先可 ...

  2. 【BZOJ4584】[Apio2016]赛艇 DP

    [BZOJ4584][Apio2016]赛艇 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都拥有若干艘划艇.同一所学校的所 ...

  3. BZOJ 4584 luogu P3643: [Apio2016]赛艇

    4584: [Apio2016]赛艇 Time Limit: 70 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 在首尔 ...

  4. BZOJ 4584 【APIO2016】 赛艇

    题目链接:赛艇 讲道理好好的Boat为啥要翻译成赛艇呢……题面中不也是划艇么…… 这道题考虑一下dp.由于划艇数量过于庞大,所以肯定不能直接记录到dp状态中.所以一个想法就是把数量离散化,然后把每个学 ...

  5. LOJ 2567: 洛谷 P3643: bzoj 4584: 「APIO2016」划艇

    题目传送门:LOJ #2249. 题意简述: 有 \(n\) 个位置,第 \(i\) 个位置可以填在 \([a_i,b_i]\) (\(1\le a_i\le b_i\le 10^9\))之间的整数, ...

  6. [BZOJ 3791] 作业 【DP】

    题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...

  7. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

    题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...

  8. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

  9. BZOJ 4380 [POI2015]Myjnie | DP

    链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...

随机推荐

  1. ACM-ICPC 2018 焦作赛区网络预赛 H、L

    https://nanti.jisuanke.com/t/31721 题意 n个位置 有几个限制相邻的三个怎么怎么样,直接从3开始 矩阵快速幂进行递推就可以了 #include <bits/st ...

  2. 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据

    版本号 最新的solr版本 : Solr 8.1.1下载地址:https://lucene.apache.org/solr/downloads.html solr-8.1.0.tgz for Linu ...

  3. 洛谷——P1951 收费站_NOI导刊2009提高(2)

    https://www.luogu.org/problem/show?pid=1951 题目描述 在某个遥远的国家里,有n个城市.编号为1,2,3,…,n. 这个国家的政府修建了m条双向的公路.每条公 ...

  4. 【永久激活,视频教程,超级详细】IntelliJ idea 2018.3安装+激活+汉化

    简介 IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他语言),IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构. ...

  5. datasnap中间件如何控制长连接的客户端连接?

    ActiveConnections: TClientDataSet; ... 有客户端连接上来的时候 procedure TForm8.DSServer1Connect(DSConnectEventO ...

  6. RabbitMQ Hello World

    RabbitMQ Hello World rabbitmq operation: C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.2\sbin ...

  7. 深入浅出Redis(三)高级特性:管道

    Redis是一个响应式的服务,当client发送一个请求后,就处于堵塞状态等待Redis返回结果. 这样一次命令消耗的时间就包含三个部分:请求从client到server的时间.结果从server到c ...

  8. react-container-query

    1.媒体查询 响应式组件 2.使用方法 (1)引入 import { ContainerQuery } from 'react-container-query'; (2)规定屏幕尺寸 /** * 媒体 ...

  9. javascript 语法规范错误提示代码

    “Missing semicolon.” : “缺少分号.”, “Use the function form of \”use strict\”.” : “使用标准化定义function.”, “Un ...

  10. Project Euler:Problem 61 Cyclical figurate numbers

    Triangle, square, pentagonal, hexagonal, heptagonal, and octagonal numbers are all figurate (polygon ...