蝈蝈的多线程Ⅱ

TimeLimit:1000MS  MemoryLimit:64MB
64-bit integer IO format:%lld
未提交 | 登录后收藏
Problem Description

众所周知,多线程即并发,就是多个CPU同时运行多个线程来缩短时间和提高效率。为了简化题目,我们取消时间片的概念,即CPU每次都是运行一整个线程,中间不会停止,直至线程结束。每个线程都有个优先级数值,数值越小优先级越高。当同时存在多个线程时,CPU会优先运行优先级最高的。现在有 2 个CPU和 n 个线程,已知每个线程需要的时间和优先级数值,保证所有优先级数值都不同,请问两个CPU联合连续工作完成所有线程需要的时间。


注:可以证明,当两个CPU同时空闲时,两个CPU选择的先后顺序不会影响答案

Input

第一行一个整数 n,表示线程的数量(1 ≤ n ≤ 1000)

接下来 n 行,每行两个整数 ai 和 bi,分别表示第 i 个线程的所需时间和优先级数值(1 ≤ ai,bi ≤ 1e9)

保证所有 bi 各不相同

Output

输出一行一个整数,表示完成所有线程需要的时间

SampleInput
4
3 1
4 10
1 2
3 5
SampleOutput
7

tip:
最开始时间t=0
1、当t=0时:
第一个CPU运行优先级为1的线程,所需时间为3,开始时间t=0,结束时间t=3
第二个CPU运行优先级为2的线程,所需时间为1,开始时间t=0,结束时间t=1
2、当t=1时:
第一个CPU还在工作
第二个CPU结束线程,选择下一个优先级为5的线程,所需时间为3,开始时间t=1,结束时间t=4
3、当t=3时:
第一个CPU结束线程,选择下一个优先级为10的线程,所需时间为4,开始时间t=3,结束时间t=7
第二个CPU还在工作
4、当t=4时:
第一个CPU还在工作
第二个CPU结束线程,因为当前已经没有线程了,所以等待
5、当t=7时:
第一个CPU结束线程,因为当前已经没有线程了,所以等待
第二个CPU继续等待
此时所有线程全部完成,所需时间为7
Submit
题目统计信息详细
总AC数31
通过人数29
尝试人数33
总提交量95
AC率30.53%
AC该题后可以添加标签
贴完标签可以获得20ACB。
并且可以获得本题所有提交代码查看权限。
点击标题可以显示标签。
如果你还没认真思考过这题,请不要查看标签
如果您已经通过了该题,请务为该题贴上标签

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: