Submission #484458

#TimeUsernameProblemLanguageResultExecution timeMemory
484458ArianKheirandishCloud Computing (CEOI18_clo)C++14
100 / 100
2043 ms3688 KiB
#include <bits/stdc++.h>
using namespace std;

#define ios                ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define all(x)            x.begin(), x.end()
#define pb                push_back
#define mp                make_pair
#define bug(str, x)            cerr << str << " : " << x << '\n'

typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 2e3 + 1;
const int maxc = 50 + 1;
const int inf = 1e9 + 10;
const int mod = 1e9 + 7;

ll dp[2][maxn][2][maxc];
int c[maxn], f[maxn], v[maxn];
int C[maxn], F[maxn], V[maxn];
vector<pii> S1, S2;

int main(){
    ios;
    int n, m;
    cin >> n;
    for(int i = 1; i <= n; i ++){
        cin >> c[i] >> f[i] >> v[i];
        S1.pb(mp(f[i], i));
    }
    sort(all(S1));
    cin >> m;
    for(int i = 1; i <= m; i ++){
        cin >> C[i] >> F[i] >> V[i];
        S2.pb(mp(F[i], i));
    }
    sort(all(S2));
    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= m; j ++){
            int c1 = c[S1[i - 1].second];
            int c2 = C[S2[j - 1].second];
            int p1 = (i == 1 ? 0 : c[S1[i - 2].second]);
            int p2 = (j == 1 ? 0 : C[S2[j - 2].second]);
            for(int k = 0; k <= 1; k ++){
                int oth = !k ? c2 : c1;
                for(int u = 1; u <= oth; u ++){
                    dp[1][j][k][u] = 0;
                    if(!k or u == c1)
                        dp[1][j][k][u] = dp[0][j][0][k ? c2 : u];
                    if(k or u == c2)
                        dp[1][j][k][u] = max(dp[1][j][k][u], dp[1][j - 1][1][!k ? c1 : u]);
                    if(S1[i - 1].first >= S2[j - 1].first){
                        int t1, t2;
                        if(!k)
                            t1 = c1, t2 = u;
                        else
                            t1 = u, t2 = c2;
                        ll res1 = (t1 == c1 ? v[S1[i - 1].second] : 0);
                        ll res2 = (t2 <= t1 ? V[S2[j - 1].second] : 0);
                        ll tp;
                        if(t1 == t2){
                            tp = dp[0][j - 1][0][p2];
                        }
                        else if(t1 > t2){
                            tp = dp[1][j - 1][1][t1 - t2];
                        }
                        else{
                            tp = dp[0][j][0][t2 - t1];
                        }
                        tp += res2 - res1;
                        dp[1][j][k][u] = max(dp[1][j][k][u], tp);
                    }
                }
            }
        }
        swap(dp[0], dp[1]);
    }
    cout << dp[0][m][0][C[S2[m - 1].second]] << '\n';
}

Compilation message (stderr)

clo.cpp: In function 'int main()':
clo.cpp:41:17: warning: unused variable 'p1' [-Wunused-variable]
   41 |             int p1 = (i == 1 ? 0 : c[S1[i - 2].second]);
      |                 ^~
#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...