机器检修
时间限制:1秒 内存限制:256M
【问题描述】
工厂的N台机器需要检修。已知将第i台机器检修时间需要ti 分钟,而这台机器每停止工作一分钟,就会少加工ci件产品。检修工每次只能检修一台机器,并且检修完一台后才能去检修另一台,中途不能停止。
检修工作一旦开始,所有未检修的机器都必须停止工作,但某台机器一旦检修完,就可以立即开机加工产品。现在需要写一个程序,帮助工厂确定一个机器检修的顺序,使得因停机而少加工产品的数量达到最小,输出这个最小值
【输入格式】
输入的第一行包含一个整数 \(N\) 。接下来的 \(N\) 行,每行包含两个用一个空格分开的整数 t_i\( 和 \)c_i$,它们的意义如题目描述。
【输出格式】
输出一个整数,表示少生产产品的最小值。
【输入输出样例】
Input
6
6 1
4 5
4 3
6 2
8 1
2 6
Output
156
【输入输出样例解释】
按输入顺序将机器顺次编号为1,2,3,4,5,6,如果按照编号 \(6, 2, 3, 4, 1, 5\) 的顺序检修机器,则少生产的产品数量计算如下:
第6台机器最先检修,因此它少加工 6*2=12 件产品;
第2台机器等待检修的时间为2分钟,因此它少加工5*(2+4)=30件产品;
第3台机器等待检修的时间为6分钟,因此它少加工3*(6+4)=30件产品;
第4台机器等待检修的时间为10分钟,因此它少加工2*(10+6)=32件产品;
第1台机器等待检修的时间为16分钟,因此它少加工1*(16+6)=22件产品;
第5台机器等待检修的时间为22分钟,因此它少加工1*(22+8)=30件产品;
所以最后少加工产品的最小值为 \(12 + 30 + 30 + 32 + 22 + 30 = 156\)。
【数据限制】
\(2 <= N <= 100,000\)
\(1 <= d_i <= 100\)
\(1 <= t_i <= 20,000\)
【来源】
Mr.he