我知道会 TLE,但是没想到一直 WA(已红温…
提交记录,跪求大佬
#include <bits/stdc++.h>
#define int long long
#define lowbit (x) x & (-x)
using namespace std;
const int MAXN = 2e3 + 5;
const int INF = 0x3f3f3f3f;
int n, m, d, ans;
int ap[MAXN], bp[MAXN], as[MAXN], bs[MAXN];
int f[MAXN][MAXN]; // f[i][j] 前 i 天,共有 j 个股票
void init () {
memset (f, -INF, sizeof f);
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= as[i]; ++j)
f[i][j] = -ap[i] * j;
}
}
signed main () {
cin >> n >> m >> d;
for (int i = 1; i <= n; ++i)
cin >> ap[i] >> bp[i] >> as[i] >> bs[i];
init ();
for (int i = d + 2; i <= n; ++i) { // 枚举当前是第 i 天。
for (int j = 0; j <= m; ++j) { // 枚举共有 j 股股票。
int x = -INF, y = -INF;
// 买入
for (int k = j - as[i]; k < j; ++k)
x = max (x, f[i - d - 1][k] + ap[i] * k) - ap[i] * j;
// 卖出
for (int k = bs[i] + j; k > j; --k)
y = max (y, f[i - d - 1][k] + bp[i] * k) - bp[i] * j;
f[i][j] = max({x, y, f[i - 1][j]});
}
} for (int i = 0; i <= as[n]; ++i) ans = max (ans, f[n][i]);
cout << ans << endl;
return 0;
}