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 }
作者:萌萌的美男子
出处:http://www.cnblogs.com/ivan-count/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/ivan-count/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。