Messages
题目大意:
有
n
n
封信,每封信在到达,到达时价值是
A
A
,之后每秒价值减去。如果在
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秒内读完,问你最后获得的最大价值。
题解
其实这题很简单,我们可以知道没封未读的信会获得的代价是因为你每封信都需要读,所以每晚一秒读,你将损失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;
}