【Codeforces】964B Messages【乱搞】

Messages


题目大意:
n n 封信,每封信在ti到达,到达时价值是 A A ,之后每秒价值减去B。如果在 TT(TT>=ti) T T ( T T >= t i ) 时刻读这封信,那么你将获得的价值是 AB(TTti) A − B ∗ ( T T − t i ) 。每秒你会获得一个价值,这个价值是 Ck C ∗ k k k 表示当前未读的信件数量。每秒钟你能读无限封信,也能不读信,但是所有信必须在T秒内读完,问你最后获得的最大价值。
题解
其实这题很简单,我们可以知道没封未读的信会获得的代价是(CB)(TTti)因为你每封信都需要读,所以每晚一秒读,你将损失B,但是你会获得C的代价(每封信都是这样)。
所以我们分类讨论

  • C<B :我们肯定让它一收到就读,毋庸置疑。
  • C=B :我们可以在任何时刻读。
  • C>B :我们肯定在T这个时刻读。
    (想一下就能懂)

所以 C<=B C <= B 时答案就是 ans=nA a n s = n ∗ A
如果 C>B C > B 那么就在 nA n ∗ A 的基础上加上 (CB)(Ta[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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值