题目链接: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]);
}