牛客练习赛36-C-Rabbit的工作(2)(完全背包)

题目链接:https://ac.nowcoder.com/acm/contest/328/C

思路: 这题我们可以转化成完全背包,由于有k个任务限制,所以我们转化一下,重新划分a[i],就是一个裸的完全背包了。

虽然能AC但3 2 5 1 6 7这组数据过不去.....

#include
using namespace std;
const int N = 4005;
int n, w, k, d[N], a[N], ans;
int main()
{
    scanf("%d%d%d",&n,&k,&w); w -= k;
    for(int i = 1; i <= n; i++) d[i] = -1e8;
    for(int i = 0; i < n; i++)
    scanf("%d",&a[i]); ans = a[0] * k;
    for(int i = 1; i < n; i++) a[i] -= a[0];
    for(int i = 1; i < n; i++)
        for(int j = i; j <= w; j++)
            d[j] = max(d[j], d[j-i] + a[i]);
    printf("%d\n",ans + d[w]);
}

 

你可能感兴趣的:(【优美的暴力------dp】)