Submission #259391

#TimeUsernameProblemLanguageResultExecution timeMemory
259391keko37Two Dishes (JOI19_dishes)C++14
15 / 100
250 ms61904 KiB
#include<bits/stdc++.h> using namespace std; typedef long long llint; const int MAXN = 200005; const llint INF = 1000000000000000000LL; int n, m, same = 1; llint a[MAXN], b[MAXN], s[MAXN], t[MAXN], p[MAXN], q[MAXN]; llint suma[MAXN], sumb[MAXN], vala[MAXN], valb[MAXN]; llint dp[2005][2005]; llint calc (int i, int j) { if (dp[i][j] != -1) return dp[i][j]; llint res = 0; if (i <= n) res = max(res, calc(i + 1, j) + (suma[i] + sumb[j - 1] <= s[i]) * p[i]); if (j <= m) res = max(res, calc(i, j + 1) + (suma[i - 1] + sumb[j] <= t[j]) * q[j]); return dp[i][j] = res; } int main () { ios_base::sync_with_stdio(false); cin.tie(0); memset(dp, -1, sizeof dp); cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i] >> s[i] >> p[i]; if (i > 1 && s[i] != s[i - 1]) same = 0; suma[i] = suma[i - 1] + a[i]; vala[i] = vala[i - 1] + p[i]; } for (int i = 1; i <= m; i++) { cin >> b[i] >> t[i] >> q[i]; if (i > 1 && t[i] != t[i - 1]) same = 0; sumb[i] = sumb[i - 1] + b[i]; valb[i] = valb[i - 1] + q[i]; } if (s[1] != t[1]) same = 0; if (same == 0) { cout << calc(1, 1); } else { llint sol = -INF; for (int i = 0; i <= n; i++) { if (suma[i] > s[1]) break; int ind = upper_bound(sumb, sumb + m + 1, s[1] - suma[i]) - sumb - 1; sol = max(sol, vala[i] + valb[ind]); } cout << sol; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...