제출 #1347854

#제출 시각아이디문제언어결과실행 시간메모리
1347854Born_To_LaughCloud Computing (CEOI18_clo)C++17
100 / 100
337 ms2100 KiB
// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const ll MOD = 998244353, INF = 3e18 + 7;

#define int ll

const int maxn = 1e5 + 50;
int n, m;
pair<int, pair<int, int>> item[maxn];

void solve(){
    cin >> n;
    for(int i=1; i<=n; ++i){
        cin >> item[i].se.fi >> item[i].fi >> item[i].se.se;
        item[i].se.se = -item[i].se.se;
    }
    cin >> m;
    for(int i=n + 1; i<=n + m; ++i){
        cin >> item[i].se.fi >> item[i].fi >> item[i].se.se;
        item[i].se.fi = -item[i].se.fi;
    }
    sort(item + 1, item + 1 + n + m, [](pair<int, pair<int, int>> a, pair<int, pair<int, int>> b){
        if(a.fi != b.fi) return a.fi > b.fi;
        else if(a.se.fi != b.se.fi) return a.se.fi > b.se.fi;
        else return a.se.se >= b.se.se;
    });
    vector<int> dp(maxn, -INF);
    dp[0] = 0;
    for(int i=1; i<=n + m; ++i){
        vector<int> nxtdp = dp;
        for(int j=0; j<=maxn - 40; ++j){
            int k = j - item[i].se.fi;
            if(k >= 0 && k < maxn){
                nxtdp[j] = max(nxtdp[j], dp[k] + item[i].se.se);
            }
        }
        dp = nxtdp;
    }
    ll ans = 0;
    for(int i=0; i<maxn; ++i) ans = max(ans, dp[i]);
    cout << ans << '\n';
}
signed main(){
    // freopen("inp.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    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...