发现如果没有大奶酪这个问题就是一个完全背包。
但是最优解只可能有两种情况:
- 没有用大奶酪
- 有一块大奶酪在塔的最顶上。
所以我们可以枚举在顶上的那块大奶酪
i
i
i,那么第
i
i
i 块奶酪在塔顶时的答案即为:
d
p
(
T
−
h
[
i
]
)
×
5
4
+
v
i
\large dp_{(T-h[i])\times\frac{5}{4}}+v_i
dp(T−h[i])×45+vi
具体细节看代码:
# include <bits/stdc++.h>
//记得Ctrl+S保存
using namespace std;
using ll = long long;
using PII = pair <int, int>;
const int N = 2005;
int n, t, k, v[N], h[N], dp[N];
signed main () {
cin >> n >> t >> k;
for (int i = 1; i <= n; i ++) {
cin >> v[i] >> h[i];
for (int j = h[i]; j <= t * 5 / 4; j ++) {
dp[j] = max (dp[j], dp[j - h[i]] + v[i]);
}
}
int ans = dp[t];
for (int i = 1; i <= n; i ++) {
if (h[i] >= k) {
ans = max (ans, dp[(t - h[i]) * 5 / 4] + v[i]);
}
}
cout << ans;
return 0;
}