CodeForces 964B Messages

Description:

There are n incoming messages for Vasya. The i-th message is going to be received after ti minutes. Each message has a cost, which equals to A initially. After being received, the cost of a message decreases by B each minute (it can become negative). Vasya can read any message after receiving it at any moment of time. After reading the message, Vasya's bank account receives the current cost of this message. Initially, Vasya's bank account is at 0.

Also, each minute Vasya's bank account receives C·k, where k is the amount of received but unread messages.

Vasya's messages are very important to him, and because of that he wants to have all messages read after T minutes.

Determine the maximum amount of money Vasya's bank account can hold after T minutes.

Input

The first line contains five integers n, A, B, C and T (1 ≤ n, A, B, C, T ≤ 1000).

The second string contains n integers ti (1 ≤ ti ≤ T).

Output

Output one integer  — the answer to the problem.

Examples
Input
Copy
4 5 5 3 5
1 5 5 4
Output
Copy
20
Input
Copy
5 3 1 1 3
2 2 2 1 1
Output
Copy
15
Input
Copy
5 5 3 4 5
1 2 3 4 5
Output
Copy
35
Note

In the first sample the messages must be read immediately after receiving, Vasya receives A points for each message, n·A = 20 in total.

In the second sample the messages can be read at any integer moment.

In the third sample messages must be read at the moment T. This way Vasya has 1, 2, 3, 4 and 0 unread messages at the corresponding minutes, he gets 40 points for them. When reading messages, he receives (5 - 4·3) + (5 - 3·3) + (5 - 2·3) + (5 - 1·3) + 5 =  - 5 points. This is 35 in total.

题目大意:
已知你会收到n封信。在某时刻t时会来一封或多封,每封信初始价值为a,从第t+1开始每时刻的价值减少b(最终价值可以为负数)。 同时银行有一种收益为c * 收到但是没有读过的信的数目。我们可以选择每封信何时读只要保证收益最大即可。

解题思路:
一开始思路想的是比较c和b的大小, c大的话就全部放在最后读,否则就立即读。 但是这样写全部最后读就很麻烦。 我们可以换一种思路, 反正要么是立即读要么是最后读要么立即读, 我们可以计算出这两种决策最后的收益选择大的即可。

代码:
#include <iostream>
#include <sstream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iomanip>
#include <utility>
#include <string>
#include <cmath>
#include <vector>
#include <bitset>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
using namespace std;
/*tools:
*ios::sync_with_stdio(false);
*freopen("input.txt", "r", stdin);
*/

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int dir[9][2] = { 0, 1, 0, -1, 1, 0, -1, 0, 1, 1, 1, -1, -1, 1, -1, -1, 0, 0 };
const int inf = 0x3f3f3f;
const double pi = acos(-1.0);
const int mod = (ll) 1e9 + 7;
const int Max = (int) 1e3 + 51;
const ld eps = 1e-10;
int arr[Max];
int acc[Max];
int main() {
    // definition
    int n, a, b, c, t, sum = 0;
    cin >> n >> a >> b >> c >> t;
    // initialization
    int x;
    for (int i = 0; i < n; ++i) {
        cin >> x;
        sum += t - x;
    }
    // perform
    int sum1 = a * n;
    int sum2 = (n * a) + (c - b) * sum;
    int ans = max(sum1, sum2);
    printf("%d\n", ans);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值