Rabbit的工作(2)

题目描述 

Rabbit通过了上次boss的考核,现在她又遇到了一个问题。
Rabbit接到了K个任务,每个任务她可以自由选择用i天去完成(1≤ i≤ N)。刁钻的boss想让Rabbit恰好用W天完成所有任务。
已知Rabbit用i天完成一个任务能让boss获得的满意度为vi(因为完成任务的质量不同),她想知道在满足boss要求的情况下能让boss获得的总满意度最大是多少。

输入描述:

第一行三个整数N,K,W。
第二行N个整数vi,vi表示用i天完成一个任务能让boss获得的满意度。

输出描述:

输出Rabbit在满足boss要求的情况下能让boss获得的总满意度最大是多少。

输入

3 3 5
6 2 4

输出

16

说明

Rabbit可以选择分别用1天,1天,3天完成这三个任务,最大满意度为6+6+4=16

备注:

2≤ N,K≤ 2000,K≤ W≤ min(4000,2*K)
0<vi≤ 10000
#include<bits/stdc++.h>
using namespace std;
const int N = 4e3 + 7;
int dp[N], v[N], n, k, w;
int main() {
    cin >> n >> k >> w;
    memset(dp, 0xcf, sizeof(dp));
    for (int i = 0; i < n; i++) cin >> v[i];
    for (int i = 1; i < n; i++) v[i] -= v[0];
    w -= k;
    dp[0] = 0;
    for (int i = 1; i < n; i++) {
        for (int j = i; j <= w; j++) {
            dp[j] = max(dp[j], dp[j - i] + v[i]);
        }
    }
    cout << dp[w] + k * v[0] << endl;
    return 0;
}

 

 

posted @ 2020-07-16 15:39  HighLights  阅读(229)  评论(0)    收藏  举报