Submission #783936

#TimeUsernameProblemLanguageResultExecution timeMemory
783936c2zi6Cloud Computing (CEOI18_clo)C++17
0 / 100
1 ms324 KiB
#include <bits/stdc++.h>
#define answer int operator()()

using namespace std;
using ll = long long;

int n, m;
vector<int> c, f, v;
vector<int> C, F, V;

struct test1 {
    answer {
        return 0;
    }
};

struct test2 {
    answer {
        return 0;
    }
};

struct test3 {
    answer {
        return 0;
    }
};

struct test4 {
    answer {
        return 0;
    }
};

struct test5 {
    //f[i] = F[i] = 1
    const int MAXCNT = 40;
    
    answer {
        ll dp1[MAXCNT + 1]; //maximum value
        for (int i = 0; i <= MAXCNT; i++) dp1[i] = -1e18;
        dp1[0] = 0;
        for (int i = 1; i <= m; i++) {
            ll weight = C[i - 1];
            ll value = V[i - 1];
            for (int j = MAXCNT; j >= 0; j--) {
                if (j - weight < 0) break;
                if (dp1[j-weight] != -1e18) dp1[j] = max(dp1[j], dp1[j-weight]+value);
            }
        }
        
        ll dp2[MAXCNT + 1]; //minimum value
        for (int i = 0; i <= MAXCNT; i++) dp2[i] = 1e18;
        dp2[0] = 0;
        for (int i = 1; i <= n; i++) {
            ll weight = c[i - 1];
            ll value = v[i - 1];
            for (int j = MAXCNT; j >= 0; j--) {
                if (j - weight < 0) break;
                if (dp2[j-weight] != 1e18) dp2[j] = min(dp2[j], dp2[j-weight]+value);
            }
        }
        
        ll ans = 0;
        for (int cur = 0; cur <= MAXCNT; cur++) {
            if (dp1[cur] == -1e18 || dp2[cur] == 1e18) continue;
            ll profit = dp1[cur] - dp2[cur];
            ans = max(ans, profit);
            //cout << (dp1[cur] == -1e18 ? -1 : dp1[cur]) << " " << (dp2[cur] == 1e18 ? -1 : dp2[cur]) << " " << cur << endl;
        }
        return ans;
    }
};

void solve() {
    bool t1, t2, t3, t4, t5;
    t1 = t2 = t3 = t4 = false;
    t5 = true;
    
    cin >> n;
    c = f = v = vector<int>(n);
    for (int i = 0; i < n; i++) {
        cin >> c[i] >> f[i] >> v[i];
        if (f[i] != 1) t5 = false;
    }
    cin >> m;
    C = F = V = vector<int>(m);
    for (int i = 0; i < m; i++) {
        cin >> C[i] >> F[i] >> V[i];
        if (F[i] != 1) t5 = false;
    }

    if (t1) cout << test1{}() << endl;
    else if (t2) cout << test2{}() << endl;
    else if (t3) cout << test3{}() << endl;
    else if (t4) cout << test4{}() << endl;
    else if (t5) cout << test5{}() << endl;
    else cout << -1 << endl;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    int t = 1;
    //cin >> t;
    while (t--) solve();
}
#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...