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 好的,了解了。