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 ", sum); 14 } 15 else 16 { 17 printf("%d ", n*A); 18 } 19 return 0; 20 }