제출 #1223790

#제출 시각아이디문제언어결과실행 시간메모리
1223790spetrTricks of the Trade (CEOI23_trade)C++20
55 / 100
1113 ms2162688 KiB
#include <bits/stdc++.h> #include <cmath> using namespace std; #define ll long long const ll mmod = 998244353; #define vl vector<long long> #define vll vector<vector<long long>> ll n,k; vll dp; vector<vector<bool>> visited; vl in; vl out; vl used; void rekurze(ll i, ll j){ if (i == 0 || j == 0) return; if (visited[i][j] == false){ visited[i][j] = true; if (dp[i][j] == dp[i-1][j] - in[i-1]){ rekurze(i-1, j); } if (dp[i][j] == dp[i-1][j-1] - in[i-1] + out[i-1]){ rekurze(i-1, j-1); used[i-1] = 1; } } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll n,k; cin >> n >>k; dp.resize(n+1, vl (k+1, -1e18)); visited.resize(n+1, vector<bool> (k+1, false)); for (ll i = 0; i < n; i++){ll num; cin >> num; in.push_back(num);} for (ll i = 0; i < n; i++){ll num; cin >> num; out.push_back(num);} for (ll i = 0; i<n; i++) dp[i][0] = 0; for (ll i = 1; i <n+1; i++){ for (ll j = 1; j < k+1; j++){ dp[i][j] = max(dp[i-1][j] - in[i-1], dp[i-1][j-1] - in[i-1] + out[i-1]); } } ll ans = -1e18; for (ll i = 1; i < n+1; i++) ans = max(ans, dp[i][k]); cout << ans <<"\n"; used.resize(n, 0); for (ll i = 1; i < n+1; i++){ if (dp[i][k] == ans){ rekurze(i,k); } } for (ll i = 0; i < n; i++){cout << used[i];} return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...