程序员
时间限制:1秒 内存限制:256M
【问题描述】
程序员小H 及其领导的小组同时接到开发两款软件的任务,并且要同时交付给各自的用户。为了尽快完成,小H 将每个软件划分成 \(m\) 个模块,然后分配给小组成员。
每个程序员完成同一软件的不同模块的所需时间是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个程序员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个程序员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。
小H 请你帮忙写一个程序计算应怎样分配每个程序员的任务,才能让这两个软件的交付时间尽量早。
【输入格式】
第一行包含两个由空格隔开的整数 \(n\) 和 \(m\) 。
接下来的 \(n\) 行每行包含两个用空格隔开的正整数 \(a\) 和 \(b\),其中第 \(i+1\) 行的第一个数表示程序员 \(i\) 完成第一个软件中的一个模块需 \(a\) 天,第一个数表示该程序员完成第二个软件中的一个模块需 \(b\) 天。
【输出格式】
仅有一行包含一个整数 \(d\),表示公司最早能于 \(d\) 天后交付软件。
【输入输出样例1】
Input
3 20
1 1
2 4
1 6
Output
18
【输入输出样例1说明】
样例中有 3 个程序员,两个软件各有 20 个模块,其中一种最优的分配方案如下:
程序员1 用 18 天完成软件2 的 18 个模块;
程序员2 用 4 天完成软件1 的 2 个模块,用 8 天完成软件2 的 2 个模块;
程序员3 用 18 天完成软件1 的 18 个模块;
【输入输出样例2】
Input
10 30
7 15
11 4
14 7
7 12
15 10
4 15
18 3
4 3
6 12
11 9
Output
35
【数据说明】
对于 \(30\%\) 的数据,\(1 ≤ n ≤10\),\(1 ≤ m ≤10\)。
对于 \(50\%\) 的数据,\(1 ≤ n ≤50\),\(1 ≤ m ≤50\)。
对于 \(100\%\) 的数据,\(1 ≤ n ≤100\),\(1 ≤ m ≤100\),\(1 ≤ a,b ≤100\)。
【来源】
Mr.he