Submission #927290

#TimeUsernameProblemLanguageResultExecution timeMemory
927290boris_mihovTwo Dishes (JOI19_dishes)C++17
10 / 100
56 ms36396 KiB
#include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 2000 + 10; const llong INF = 1e18; int n, m; struct Dish { int time; llong limit; int reward; }; Dish a[MAXN]; Dish b[MAXN]; llong dp[MAXN][MAXN]; bool bl[MAXN][MAXN]; llong f(int aPos, int bPos, llong sum) { if (aPos == n + 1 && bPos == m + 1) { return 0; } if (bl[aPos][bPos]) { return dp[aPos][bPos]; } bl[aPos][bPos] = true; dp[aPos][bPos] = -INF; if (aPos <= n) { dp[aPos][bPos] = std::max(dp[aPos][bPos], f(aPos + 1, bPos, sum + a[aPos].time) + (sum + a[aPos].time <= a[aPos].limit ? a[aPos].reward : 0)); } if (bPos <= m) { dp[aPos][bPos] = std::max(dp[aPos][bPos], f(aPos, bPos + 1, sum + b[bPos].time) + (sum + b[bPos].time <= b[bPos].limit ? b[bPos].reward : 0)); } return dp[aPos][bPos]; } void solve() { std::cout << f(1, 1, 0) << '\n'; } void input() { std::cin >> n >> m; for (int i = 1 ; i <= n ; ++i) { std::cin >> a[i].time >> a[i].limit >> a[i].reward; } for (int i = 1 ; i <= m ; ++i) { std::cin >> b[i].time >> b[i].limit >> b[i].reward; } } void fastIOI() { std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); 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...