比如我下面的代码:没过样例,但是能AC,主要问题在于没有考虑:在剩下的时间中,刚好能刷两道题的情况。正确代码,最后那里的判断应该没有=。
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef long double ld;
const int N = 1e5 + 10;
int v[N], t[N], w[N], dp[N];
void solve() {
int n, m, k, r; cin >> n >> m >> k >> r;
for (int i = 1; i <= n; i ++) cin >> v[i];
for (int i = 1; i <= m; i ++) cin >> t[i];
for (int i = 1; i <= m; i ++) cin >> w[i];
sort(v + 1, v + n + 1);
int res, ans = 0;
vector<int> ls;
for (int i = 1; i <= n; i ++) {
for (int j = r; j >= t[i]; j --) {
dp[j] = max(dp[j], dp[j - t[i]] + w[i]);
if (dp[j] >= k) {res = r - j; ls.push_back(res);}
}
}
for (int i = 1; i <= n; i ++) {
res -= v[i];
if (res <= 0) break;
ans ++;
}
cout << ans << endl;
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
solve();
return 0;
}