Codeforces Round #475 (Div. 2)

B. Messages

  题意:有n个消息分别在ti的时候收到。设所有消息收到时初始值为A,每过一秒,其值减去B。当在某一秒选择读某个消息时,获值为当前消息的值;如果在某一秒结束的时候,手上有k则消息未读,则获值C*k。并且在T秒结束的时候,必须读完所有消息。问能获得的最大值为?

  思路:消息要么选择不读,则价值-B,但同时会获得C。因此如果C-B大于0,那么应该选择所有消息都在最后一秒读;否则应当收到的时候立即读。

 1 #include<cstdio>
 2 using namespace std;
 3 int v[1010];
 4 int main()
 5 {
 6     int n, A, B, C, T;
 7     scanf("%d%d%d%d%d", &n, &A, &B, &C, &T);
 8     for (int i = 1; i <= n; i++) scanf("%d", v + i);
 9     if (C - B > 0)
10     {
11         int sum = 0;
12         for (int i = 1; i <= n; i++) sum += C * (T - v[i])+(A-B*(T-v[i]));
13         printf("%d\n", sum);
14     }
15     else
16     {
17         printf("%d\n", n*A);
18     }
19     return 0;
20 }
View Code

猜你喜欢

转载自www.cnblogs.com/ivan-count/p/8931785.html