题解有误 & 请求加强数据

P1417 烹调方案

zhb2000 @ 2021-03-19 20:54:24

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

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];

by wheneveright @ 2021-03-19 21:01:31

你应该说是 Hack


by wheneveright @ 2021-03-19 21:02:41

@zhb2000 一般来说请求加强数据代表题解没有锅,而 Hack 就是代表题解出问题了


by zhb2000 @ 2021-03-19 21:07:02

@wheneveright 好的,了解了。


|