【Codeforces】964B Messages【乱搞】

Messages


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

所以C<=B时答案就是ans=nA
如果C>B那么就在nA的基础上加上(CB)(Ta[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;
}
posted @ 2018-04-18 19:26  XSamsara  阅读(144)  评论(0编辑  收藏  举报