Messages
题目大意:
有 n n 封信,每封信在
ti
到达,到达时价值是 A A ,之后每秒价值减去
B
。如果在 TT(TT>=ti) T T ( T T >= t i ) 时刻读这封信,那么你将获得的价值是 A−B∗(TT−ti) A − B ∗ ( T T − t i ) 。每秒你会获得一个价值,这个价值是 C∗k C ∗ k , k k 表示当前未读的信件数量。每秒钟你能读无限封信,也能不读信,但是所有信必须在T秒内读完,问你最后获得的最大价值。
题解
其实这题很简单,我们可以知道没封未读的信会获得的代价是
(C−B)∗(TT−ti)
因为你每封信都需要读,所以每晚一秒读,你将损失B,但是你会获得C的代价(每封信都是这样)。
所以我们分类讨论
- C<B :我们肯定让它一收到就读,毋庸置疑。
- C=B :我们可以在任何时刻读。
- C>B :我们肯定在T这个时刻读。
(想一下就能懂)
所以 C<=B C <= B 时答案就是 ans=n∗A a n s = n ∗ A 。
如果 C>B C > B 那么就在 n∗A n ∗ A 的基础上加上 (C−B)∗(T−a[i]) ( C − B ) ∗ ( T − a [ i ] ) 就可以了。
代码如下
#include<cstdio> using namespace std; int n,A,B,C,T,a[1005],ans; int main(){ scanf("%d%d%d%d%d",&n,&A,&B,&C,&T); for(int i=1;i<=n;i++) scanf("%d",&a[i]); ans=n*A; if(B<C){ for(int i=1;i<=n;i++) ans+=(C-B)*(T-a[i]); } printf("%d\n",ans); return 0; }
今天的文章
【Codeforces】964B Messages【乱搞】分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/60690.html