Submission #1171084

#TimeUsernameProblemLanguageResultExecution timeMemory
1171084owieczkaTwo Dishes (JOI19_dishes)C++20
10 / 100
77 ms31816 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll time1[1'000'003];
ll time2[1'000'003];
ll crit1[1'000'003];
ll crit2[1'000'003];
ll pts1[1'000'003];
ll pts2[1'000'003];

ll dp[2'002][2'002];

int main()
{
   ios::sync_with_stdio(0); cin.tie(0);
   ll n, m;
   cin >> n >> m;
   bool sub1 = 1;
   for (ll i = 1; i <= n; i++)
   {
      cin >> time1[i] >> crit1[i] >> pts1[i];
      if (i && crit1[i] != crit1[i-1])sub1 = 0;
      time1[i] += time1[i-1];
   }
   for (ll i = 1; i <= m; i++)
   {
      cin >> time2[i] >> crit2[i] >> pts2[i];
      if (i && crit2[i] != crit2[i-1])sub1 = 0;
      time2[i] += time2[i-1];
   }
   ll ans = 0;
   if (n <= 2e3 && m <= 2e3)
   {
      for (ll i = 0; i <= n; i++)
      {
         for (ll j = 0; j <= m; j++)
         {
            if (!i && !j)continue;
            if (!i)
            {
               dp[i][j] = dp[i][j-1] + ((time1[i]+time2[j] <= crit2[j])?pts2[j]:0);
            }
            else if (!j)
            {
               dp[i][j] = dp[i-1][j] + ((time1[i]+time2[j] <= crit1[i])?pts1[i]:0);
            }
            else 
               dp[i][j] = max(dp[i-1][j] + ((time1[i]+time2[j] <= crit1[i])?pts1[i]:0), dp[i][j-1] + ((time1[i]+time2[j] <= crit2[j])?pts2[j]:0));
         }
      }
      ans = dp[n][m];
   }
   else 
   {
      for (ll i = 1; i <= m; i++)
         pts2[i] += pts2[i-1];
      for (ll i = 1; i <= n; i++)
         pts1[i] += pts1[i-1];
      ll c = crit1[1];
      ll j = 0;
      for (ll i = n; i >= 0; i--)
      {
         if (time1[i] > c)continue;
         while(time2[j+1] + time1[i] <= c && j <= m)
         {
            j++;
         }
         ans = max(ans, pts1[i] + pts2[j]);
      }
   }
   cout << ans << '\n';
}
#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...