Messages (思维)

Messages

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
4 5 5 3 5
1 5 5 4
Output
20
Input
5 3 1 1 3
2 2 2 1 1
Output
15
Input
5 5 3 4 5
1 2 3 4 5
Output
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.


题意:给你一系列消息,这些消息在第ti分钟收到,如果立即读这条消息可以获得a的金钱,不然过一分钟获得金钱减少b(从a的基础上),但每一分钟可以获得c* k的金钱,k为没有读的消息的个数,求最后获得最大值的金钱

分析:假设每到一条消息我们都把他读了,我们将直接获得基本ans=n*a;通过题意我们发现如果对于每一道题每过一分钟多出(或减少)的收入为c*1-b,所以如果c-b>0
说明越往后读这条信息可以使得收入越多,如果c-b<0说明越往后读这条信息使得收入越少,如果等于0没有影响。所以我们只需要判断一下,如果c-b<0,说明每条信息我们必须收到就读才能使收入最大,如果c-b>0那么我们尽量都拖到最后才读,也就是拖到T时间再读,这样每个信息需要拖的时间总和sum  = (T-ti)求和,最后总的收入就是a*n-sum*(c-b)


code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main(){
    int n,a,b,c,t;
    int ans = 0,sum = 0;
    int arr[1100];
    cin >> n >> a >> b >> c >> t;
    for(int i = 0; i < n; i++){
        cin >> arr[i];
        sum += t - arr[i];
    }
    ans = n * a;
    if(b >= c)
        cout << ans << endl;
    else
        cout << ans + sum * (c - b) << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/codeswarrior/article/details/80309665