众所周知,多线程即并发,就是多个CPU同时运行多个线程来缩短时间和提高效率。每个线程被分为数个时间长度为 1 的时间片,CPU每次运行的不是整个线程,而是线程的一个时间片,同样,运行中间不会停止,直至当前时间片结束。尽管线程被拆分,但是一个线程内时间片的相对运行顺序是不会变的,如果前面的时间片还没有运行,则只会运行前面的时间片。当CPU运行完当前线程的时间片时,CPU可以选择继续运行这个线程的下一个时间片,或者选择另一个线程的时间片。一个线程的完成可以经过多个CPU,即不要求所有时间片都由同一个CPU完成,但是一个线程同一时间最多只能由一个CPU运行。每个CPU都有自己的性能分数,每个线程也都有性能要求,线程的性能要求代表线程内全部时间片的性能要求。一个时间片只能运行在性能分数不低于自己性能要求的CPU上。现在有 2 个CPU和 n 个线程,已知每个CPU的性能分数、每个线程需要的时间和性能要求,请问完成所有线程需要的最短时间。
第一行三个整数 n、k1 和 k2,分别表示线程的数量和两个CPU的性能分数(1 ≤ n ,k1,k2 ≤ 100)
接下来 n 行,每行两个整数 ai 和 bi,分别表示第 i 个线程的所需时间和性能要求(1 ≤ ai,bi ≤ 100)
如果所有线程能够完成,则先输出一行“YES”,再输出一行一个整数表示完成所有线程需要的最短时间;反之,如果不能完成所有线程,则输出一行“NO”
3 1 2 1 1 1 2 2 1
YES 2 tip: 最开始三个线程进度为(0,0,0) 当t=1时:性能为1的CPU运行第三个线程,性能为2的CPU运行第一个线程,三个线程进度为(1,0,1) 当t=2时:性能为1的CPU运行第三个线程,性能为2的CPU运行第二个线程,三个线程进度为(1,1,2) 此时所有线程全部完成,所需时间为2