제출 #146325

#제출 시각아이디문제언어결과실행 시간메모리
146325aayush9Cloud Computing (CEOI18_clo)C++14
100 / 100
1537 ms3444 KiB
#include "bits/stdc++.h"

#define fast_cin() ios_base::sync_with_stdio(0); cin.tie(0);
#define pb push_back

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int N = 1e5 + 10, M = 4e3 + 10, mod = 1e9 + 7;
const ll inf = 1e18 + 42;

struct st {
 int f, q, p;
 bool operator<(const st &o) const {
  return q > o.q;
 }
};

int f[M], q[M], p[M], F[M], Q[M], P[M];
vector<st> factories, requests;
ll dp[2][N];

int main() {
 fast_cin();
 int n; cin >> n;
 ll ans = 0;
 for (int i = 1; i <= n; ++i) {
  cin >> F[i] >> Q[i] >> P[i];
  for (int j = 0; j < F[i]; ++j) {
   factories.pb({1, Q[i], P[i]});
  }
  requests.pb({F[i], Q[i], P[i]});
  ans -= P[i];
 }
 int m; cin >> m;
 for (int i = 1; i <= m; ++i) {
  cin >> f[i] >> q[i] >> p[i];
  requests.pb({f[i], q[i], p[i]});
 }
 factories.pb({0, int(1e9) + 42, 0});
 requests.pb({0, int(1e9) + 42, 0});
 sort(factories.begin(), factories.end());
 sort(requests.begin(), requests.end());
 n = factories.size() - 1;
 m = requests.size() - 1;
 for (int i = 1; i <= m; ++i) {
  ll *cur = dp[i & 1];
  ll *prv = dp[1 - (i & 1)];
  cur[0] = 0;
  for (int j = 1; j <= n; ++j) {
   cur[j] = max(prv[j], cur[j - 1]);

   if (j >= requests[i].f and factories[j].q >= requests[i].q) {
    cur[j] = max(cur[j], prv[j - requests[i].f] + requests[i].p);
   }
  }
  // cout << cur[n] << '\n';
 }
 // cout << dp[m & 1][n] << " " << ans << '\n';
 cout << dp[m & 1][n] + 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...