제출 #1287640

#제출 시각아이디문제언어결과실행 시간메모리
1287640paulxaxaCloud Computing (CEOI18_clo)C++20
100 / 100
234 ms1248 KiB
#include <bits/stdc++.h>



#define NMAX 2000
#define LOG 19
#define ll long long int
#define MOD 30103
#define INF (ll)1e17

using namespace std;

ifstream fin("cod.in");
ofstream fout("cod.out");

struct triplet
{
    int c,f,v;
} a[NMAX+1],b[NMAX+1];
int n,m;

bool cmp(triplet x, triplet y)
{
    return x.f > y.f;
}

ll dp[50*NMAX+1];

void add_dp(int j,int c)
{
    for(int i=NMAX*50;i>=j;i--)
    {
        dp[i] = min(dp[i],dp[i-j] + c);
    }
}
void remove_dp(int j,int c)
{
    for(int i=0;i+j<=NMAX*50;i++)
    {
        dp[i] = min(dp[i],dp[i+j] - c);
    }
}
int main()
{
    cin >> n;
    for(int i=1;i<=n;i++)
    {
        cin >> a[i].c >> a[i].f >> a[i].v;
    }
    cin >> m;
    for(int i=1;i<=m;i++)
    {
        cin >> b[i].c >> b[i].f >> b[i].v;
    }
    sort(a+1,a+n+1,cmp);
    sort(b+1,b+m+1,cmp);

    for(int i=1;i<=NMAX*50;i++)
    {
        dp[i] = INF;
    }
    dp[0] = 0;

    int j=1;
    for(int i=1;i<=m;i++)
    {
        while(j<=n && a[j].f >= b[i].f)
        {
            add_dp(a[j].c,a[j].v);
            j++;
        }
        remove_dp(b[i].c, b[i].v);
    }
    ll mn=INF;
    for(int i=0;i<=50*NMAX;i++)
    {
        mn=min(mn,dp[i]);
    }
    cout << -mn;
}




#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...