Codeforces 964B题解报告

一、题目

http://codeforces.com/contest/964/problem/B

大意:

有n封信,每封信在ti到达,到达时价值是A,之后每秒价值减去B。如果在T(T >= ti)时刻读这封信,那么你将获得的价值是A − B ∗ (T − ti)。每秒你会获得一个价值,这个价值是C ∗ k,k表示当前未读的信件数量。每秒钟你能读无限封信,也能不读信,但是所有信必须在T秒内读完,问你最后获得的最大价值。

二、分析

每封信都需要读,每晚一秒读,将多损失B,但是会多获得C的价值。
T时刻,每封未读的信会获得的代价是(C − B) ∗ (T − ti)。

分三种情况:
C<B:每封信一收到就读,总价值最大。
C=B:每封信任何时候读,总价值都一样。
C>B:所有的信在T时刻读,总价值最大。

所以C <= B时,ans = n ∗ A。
C > B时,在n ∗ A的基础上加上(C − B) ∗ (T − a[i])就可以了。

三、程序

#include<cstdio>

int main()
{
    int n, A, B, C, T;
    scanf("%d %d %d %d %d",&n, &A, &B, &C, &T);

    int a[n + 1];
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
    }

    int 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;
}

TopCoder & Codeforces & AtCoder交流QQ群:648202993
更多内容请关注微信公众号

《Codeforces 964B题解报告》 wechat_public.jpg

    原文作者:海天一树X
    原文地址: https://www.jianshu.com/p/52f2a4d2efe4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞