测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40207. 答疑

填空题 困难

题目描述

答疑

题目描述

有 n nn 位同学同时找老师答疑。每位同学都预先估计了自己答疑的时间。

老师可以安排答疑的顺序,同学们要依次进入老师办公室答疑。

一位同学答疑的过程如下:

首先进入办公室,编号为 i ii 的同学需要 s i sisi 毫秒的时间。

然后同学问问题老师解答,编号为 i ii 的同学需要 a i aiai 毫秒的时间。

答疑完成后,同学很高兴,会在课程群里面发一条消息,需要的时间可以忽略。

最后同学收拾东西离开办公室,需要 e i eiei 毫秒的时间。一般需要 10 1010 秒、20 2020 秒或 30 3030 秒,即 e i eiei 取值为 10000 1000010000,20000 2000020000 或 30000 3000030000。

一位同学离开办公室后,紧接着下一位同学就可以进入办公室了。

答疑从 0 00 时刻开始。老师想合理的安排答疑的顺序,使得同学们在课程群里面发消息的时刻之和最小。

输入格式

输入第一行包含一个整数 n nn,表示同学的数量。

接下来 n nn 行,描述每位同学的时间,其中第 i 行包含三个整数 s i , a i , e i s i , a i , e isi,ai,ei ,意义如上所述。

输出格式

输出一个整数,表示同学们在课程群里面发消息的时刻之和最小是多少。

样例输入

3

10000 10000 10000

20000 50000 20000

30000 20000 30000

样例输出

280000

样例说明

按照 1 , 3 , 2 1, 3, 21,3,2 的顺序答疑,发消息的时间分别是 20000 , 80000 , 180000 20000, 80000, 18000020000,80000,180000。

数据范围

对于 30% 的评测用例,1 ≤ n ≤ 20 1 ≤ n ≤ 201≤n≤20

对于 60% 的评测用例,1 ≤ n ≤ 200 1 ≤ n ≤ 2001≤n≤200

对于所有评测用例,1 ≤ n ≤ 1000 , 1 ≤ s i ≤ 60000 , 1 ≤ a i ≤ 1000000 , e i ∈ 10000 , 20000 , 30000 1 ≤ n ≤ 1000,1 ≤ s i ≤ 60000,1 ≤ a i ≤ 1000000,e i ∈ {10000,20000,30000}1≤n≤1000,1≤si≤60000,1≤ai≤1000000,ei∈10000,20000,30000,即 e i e iei 一定是 10000 、 20000 、 30000 10000、20000、3000010000、20000、30000 之一。

参考答案

#include <iostream> #include <algorithm> using namespace std; const int N = 1010; struct Person { int s, a, e; bool operator < (const Person &t) const { if(s + a + e != t.s + t.a + t.e) return s + a + e < t.s + t.a + t.e; return s + a < t.s + t.a; } }p[N]; int main() { int n; cin >> n; for (int i = 1; i <= n; i ++) { int s, a, e; cin >> s >> a >> e; p[i] = {s, a, e}; } sort(p + 1, p + 1 + n); long long ans = 0, time = 0; for (int i = 1; i <= n; i ++) { time += p[i].s + p[i].a; ans += time; time += p[i].e; } cout << ans << endl; return 0; }
上一题 下一题