在首尔城中,汉江横贯东西。在汉江的北岸,从西向东星星点点地分布着 NN 个划艇学校,编号依次为 11 到 NN。每个学校都拥有若干艘划艇。同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同。颜色相同的划艇被认为是一样的。每个学校可以选择派出一些划艇参加节日的庆典,也可以选择不派出任何划艇参加。如果编号为 ii 的学校选择派出划艇参加庆典,那么,派出的划艇数量可以在 aiai 至 bibi 之间任意选择(ai≤biai≤bi)。

值得注意的是,编号为 ii 的学校如果选择派出划艇参加庆典,那么它派出的划艇数量必须大于任意一所编号小于它的学校派出的划艇数量。

输入所有学校的 ai,biai,bi 的值,求出参加庆典的划艇有多少种可能的情况,必须有至少一艘划艇参加庆典。两种情况不同当且仅当有参加庆典的某种颜色的划艇数量不同。

输入格式

第一行包括一个整数 NN,表示学校的数量。

接下来 NN 行,每行包括两个正整数,用来描述一所学校。其中第 ii 行包括的两个正整数分别表示 ai,bi(1≤ai≤bi≤109)ai,bi(1≤ai≤bi≤109)。

输出格式

输出一行,一个整数,表示所有可能的派出划艇的方案数除以 1,000,000,0071,000,000,007 得到的余数。

样例一

input

2
1 2
2 3

output

7

explanation

在只有一所学校派出划艇的情况下有 44 种方案,两所学校都派出划艇的情况下有 33 种方案,所以答案为 77。

限制与约定

子任务 11(99 分):1≤N≤5001≤N≤500 且对于所有的 1≤i≤N1≤i≤N,保证 ai=biai=bi。

子任务 22(2222 分):1≤N≤5001≤N≤500 且 ∑Ni=1(bi−ai)≤106∑i=1N(bi−ai)≤106。

子任务 33(2727 分):1≤N≤1001≤N≤100。

子任务 44(4242 分):1≤N≤5001≤N≤500。

时间限制:1s1s

空间限制:256MB

直接讲正解吧。

肯定要离散,但是离散完好像很不好搞

设计状态f[i][j][k]表示考虑到第i这个位置,然后最后取的数属于第j块,k表示第j块选了多少个数。

先考虑k>1的情况,很显然答案是f[i][j][k] = f[i][j][k-1]+在第j个块选1个数使得这个数满足大于前k-1个数,

这个的话其实就是C(lenj,k)/C(lenj,k-1),理解的话就是前者是在后者的基础上多选一个数,而组合数是不计顺序的一个排列。

可以对这个式子化简就是(lenj-k+1)/k

然后考虑k = 1的做法

首先我们可以只取这个数,那么就是f[i][j][1] = f[i-1][j][1]+lenj;

还有就是还要加上f[i-1][j'][k']的和乘上lenj,其中j'<j且k'<i这个的话用一个前缀和优化,意思大概就是之前可以选在j块之前的都可以接,然后因为在i之前,所以最多只选i-1个数,感觉这个思路很妙啊。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
const int MOD = 1000000007;
int b[MAXN], lenb, l[MAXN], r[MAXN], inv[MAXN], len[MAXN];
int f[2][MAXN][MAXN], ans;
int n, m, i, j, k, g[MAXN];
inline int get()
{char c;while ((c = getchar()) < 48 || c > 57);int res = c - 48;while ((c = getchar()) >= 48 && c <= 57)res = res * 10 + c - 48;return res;
}
inline int ksm(int x, int y, int z)
{int b = 1;while (y){if (y & 1) b = (long long)b * x % z;x = x * (long long)x % z;y >>= 1;}return b;
}
int main()
{n = get();for(i = 1; i <= n; i ++)l[i] = get(), r[i] = get(), b[++lenb] = l[i], b[++lenb] = ++r[i];sort(b + 1, b + 1 + lenb);lenb = unique(b + 1, b + 1 + lenb) - 1 - b;for(i = 1; i <= n; i ++)l[i] = lower_bound(b + 1, b + 1 + lenb, l[i]) - b, r[i] = lower_bound(b + 1, b + 1 + lenb, r[i]) - b;int las = 1, now = 0;for(i = 1; i <= n * 2; i ++)inv[i] = ksm(i, MOD - 2, MOD);for(i = 1; i < lenb; i ++)len[i] = b[i + 1] - b[i];for(i = l[1]; i < r[1]; i ++)f[now][i][1] = b[i + 1] - b[i], g[i] += b[i + 1] - b[i];for(i = l[1]; i < lenb; i ++)g[i] += g[i - 1], (g[i] >= MOD) ? g[i] -= MOD : g[i];for(i = 2; i <= n; i ++){swap(las, now);for(j = 1; j < lenb; j ++)if (j < l[i] || j >= r[i])for(k = 1; k < i; k ++)f[now][j][k] = f[las][j][k];for(j = l[i]; j < r[i]; j ++){for(k = min(i, len[j]); k >= 2; k --)f[now][j][k] = (f[las][j][k] + (long long)f[las][j][k - 1] % MOD * (len[j] - k + 1) % MOD * inv[k]) % MOD;f[now][j][1] = (f[las][j][1] + (long long)(g[j - 1] + 1) * len[j]) % MOD;}for(j = l[i]; j < lenb; j ++){g[j] = g[j - 1];for(k = min(i, len[j]); k >= 1; k --){g[j] += f[now][j][k];if (g[j] >= MOD) g[j] -= MOD;}}}for(j = 1; j < lenb; j ++)for(k = 1; k <= n; k ++)ans += f[now][j][k], (ans >= MOD) ? ans -= MOD : ans;cout << ans << endl;
}

apio 2016 T1相关推荐

  1. Luogu 3642 [APIO 2016] 烟火表演

    传送门 引例(上一道题) 凸函数 一开始的思路 正解 参考代码 总结 传送门 引例(上一道题) 凸函数   回忆我们上一道题是怎么做的.我们维护的东西的实质是一个(下)凸函数.由于我们的操作相当于是加 ...

  2. php重写地址,php url地址重写

    地址重写: urlRewrite: 就是:  1. 将php的地址index.php不写只写Action模块和function方法, 或者 2. php地址转变成html地址, 就是一种假的html, ...

  3. 记录在APIO2019前

    2019-05-07 嗯, 只报名参加了APIO. 今天是五月七号,距离前往帝都参加我的退役之战, 还有八天(5.15) 然后没什么可说的, 就是记录一下这几天吧. 今天下午去学了虚树(其实没什么的) ...

  4. 神经网络模型的模型假设,人工神经网络预测模型

    神经网络可以用来预测时间序列吗 神经网络是可以用来预测时间序列.例如神经网络人口预测. 已知1990至2009年的某地区人口数[112830424456496050635674766592105124 ...

  5. 模糊神经网络算法原理,模糊神经网络算法代码

    用matlab做模糊神经网络,步骤是什么? 我知道模糊控制包括:模糊化,模糊推理,清晰化等步骤 20 谷歌人工智能写作项目:神经网络伪原创 求matlab大神帮帮忙,做模糊神经网络预测 用matlab ...

  6. bp神经网络时间序列预测,bp神经网络有几个阶段

    什么是BP神经网络? . BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成:正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差 ...

  7. 神经网络预测软件哪个好,神经网络预测软件下载

    大神看看这是用的什么软件进行的神经网络预测,数据太清晰可见了 谷歌人工智能写作项目:神经网络伪原创 求matlab大神帮帮忙,做模糊神经网络预测 用matlabR2014a软件,可以进行BP模糊神经网 ...

  8. 模糊神经网络matlab定义,模糊神经网络matlab仿真

    模糊神经网络matlab 您好,是这样的:经过训练后的参数比较差,用原数据输入训练好的网络,得出结果和要的结果误差很大,不明白是怎么回事?还有要是多输入多输出这段程序该怎么改?模糊神经网络可以用mat ...

  9. 2016年全国高中数学联赛加试T1解答

    2016年全国高中数学联赛加试T1解答 加试T1为不等式. 设实数a1,a2,-,a2016a_1,a_2,-,a_{2016}a1​,a2​,-,a2016​满足9ai>11ai+12(i=1 ...

最新文章

  1. ICLR 2020将采用远程会议,首次在非洲办会可能就这样泡汤了
  2. C语言之归并排序算法
  3. 连续子数组的最大和python_连续子数组的最大和
  4. 如何估算Oracle数据库所需的UNDO表空间的大小
  5. MOCTF-Web-一道水题
  6. php生成excel范例,支持任意行列
  7. 51单片机点亮数码管
  8. zabbix专题:附加 zabbix配置文件详解
  9. Spring(十六)之MVC框架
  10. 按比例缩小图片的CSS代码
  11. redis5.0.7集群搭建
  12. java中md5校验工具,java实现MD5文件校验
  13. 一直激励我的一个故事--驴子的故事
  14. Centos7 在docker中安装Mysql 8.0 的相关问题
  15. 4.OC仿写知乎客户端
  16. format()用于格式化方法,即用来控制字符串和变量的显示效果。
  17. 每日一题「整数除法」
  18. 前端-可视化创建vue项目
  19. jdk1.8、jre1.8运行环境下载安装与环境配置
  20. 【STM32】GPIO输入—按键检测

热门文章

  1. “因为内存泄漏,我的 M1 MacBook Pro 瘫痪了”
  2. java osta_Java语言程序设计_科泰计算机学校用户致胜口碑致远
  3. 优秀的计算机编程类博客 和 文章
  4. 什么是SAN?它有什么用?
  5. invalid csrf token. See https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范
  6. 艾媒报告|2018-2019中国智慧物流行业研究报告
  7. Cisco 自反ACL真机配置实例
  8. 狼人杀 连接消息服务器,狼人杀怎么玩场外 场外怎么发消息
  9. 世界顶级户外运动品牌
  10. C语言 请使用short int型的变量计算两个7位十进制整数的和,要求使用尽可能少的变量