题解有误 & 请求加强数据
查看原帖
题解有误 & 请求加强数据
233351
zhb2000楼主2021/3/19 20:54

题解中的解法基本上都是下面这种:

sort(arr + 1, arr + 1 + n, cmp);
for (int i = 1; i <= n; i++)
    for (int j = T; j >= arr[i].c; j--)
        f[j] = max(f[j], f[j - arr[i].c] + arr[i].a - arr[i].b * j);
ll ans = 0;
for (int i = 0; i <= T; i++)
    ans = max(ans, f[i]);
cout << ans;

考虑以下数据:

15 2
200
200
10
-10
5
5

题解做法得出的结果是 450,但正确答案应该是 500。

以下做法可以得出正确结果:

sort(arr + 1, arr + 1 + n, cmp);
for (int i = 1; i <= n; i++)
{
    for (int j = T; j >= arr[i].c; j--)
        f[j] = max(f[j], f[j - arr[i].c] + arr[i].a - arr[i].b * j);
    for (int j = 1; j <= T; j++)
        f[j] = max(f[j - 1], f[j]);
}
cout << f[T];
2021/3/19 20:54
加载中...