比赛链接:传送门
Gym 101775A Chat Group(签到:待补)
Gym 101775B Scapegoat(待补)
Gym 101775C Traffic Light(贪心+思维)
思路:
需要证明两个点:
① 所有的N+1个S都是必须要走的,并且可以适当安排使得红灯只用等最长的一个。
② 上面这样的安排的答案是S0+S1+…+SN+max(Bi),而答案不可能比这个小,因为总有一种走法可以等到最长的那个红绿灯,如果其他的红绿灯也要等的话就比上面的方法大了。
#include <bits/stdc++.h> using namespace std; const int MAX_N = 1e3 + 5; double S[MAX_N]; double A[MAX_N], B[MAX_N]; int main() { int T; cin >> T; for (int kase = 1; kase <= T; kase++) { int N; cin >> N; for (int i = 0; i <= N; i++) { scanf("%lf", S+i); } double _max = -1; for (int i = 1; i <= N; i++) { scanf("%lf%lf", A+i, B+i); _max = max(_max, B[i]); } for (int i = 0; i <= N; i++) { _max += S[i]; } printf("Case #%d: %.6lf\n", kase, _max); } return 0; }