用的是贪心的思路
#include <bits/stdc++.h>
#define INF LONG_LONG_MAX
#define int long long
using namespace std;
int dp[2][5005], w[5005], v[5005];
signed main(){
int n, x, s, m;
cin >> n >> x >> s >> m;
for (int i = 1; i <= x; i ++){
dp[0][i] = INF;
}
for (int i = 1; i <= n; i ++){
int u, sumw = 0;
cin >> u;
for (int j = 1; j <= u; j ++){
cin >> v[j];
}for (int j = 1; j <= u; j ++){
cin >> w[j];
sumw += w[j];
}for (int j = m + 1; j <= s; j ++){
dp[1][j] = INF;
}
sumw = min(sumw + m, s);
for (int j = 1; j <= u; j ++){
for (int k = sumw; k >= w[j]; k --){
dp[1][k] = min(dp[1][k], dp[1][k - w[j]] + v[j]);
}
}for (int j = x; j >= 0; j --){
for (int k = m; k <= sumw; k ++){
dp[0][j] = min(dp[0][j], dp[0][max(j - k, 0ll)] + dp[1][k]);
}
}
}
cout << (dp[0][x] == INF ? -1 : dp[0][x]);
}
dalao求调