Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cstdint>
- #include <cstdio>
- #include <climits>
- using namespace std;
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- int N, K;
- cin >> N >> K;
- vector<int> V(N), C(N);
- for(int& v : V) cin >> v;
- for(int& c : C) cin >> c;
- vector<vector<int>> dp(N+1, vector<int>(K+1, INT_MAX));
- dp[0][0] = 0;
- for(int i = 0; i < N; ++i) {
- for(int k = 0; k <= K; ++k) {
- if(dp[i][k] == INT_MAX) continue;
- // Situazione in cui il giocatore non salta il livello
- int next_charge = min(K, k + C[i]);
- dp[i+1][next_charge] = min(dp[i+1][next_charge], dp[i][k] + V[i]);
- // Situazione in cui il giocatore salta il livello (se possibile)
- if(k == K) dp[i+1][0] = min(dp[i+1][0], dp[i][k]);
- }
- }
- int min_time = *min_element(dp[N].begin(), dp[N].end());
- cout << min_time << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement