제출 #1188750

#제출 시각아이디문제언어결과실행 시간메모리
1188750vukhacminhCloud Computing (CEOI18_clo)C++20
100 / 100
579 ms2032 KiB
/**
*    Author :  Vu Khac Minh
*
**/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
const int mod = 1e9+7;
struct store
{
    int c,f,v;
}a[maxn*5];
int n,m,all;
long long  dp[2][maxn];
bool cmp(store &x,store &y)
{
    if(x.f == y.f) return x.v<y.v;
    return x.f > y.f;
}
int main()
{
    cin>>n;
    for(int i =1;i<=n;i++)
    {
        cin>>a[i].c>>a[i].f>>a[i].v;
        all+=a[i].c;
        a[i].v = -a[i].v;
    }
    cin>>m;
    for(int i =n+1;i<=n+m;i++)
    {
        cin>>a[i].c>>a[i].f>>a[i].v;
        a[i].c = -a[i].c;
    }
    sort(a+1,a+m+n+1,cmp);
    for(int i =0;i<=all;i++) dp[0][i] = dp[1][i] = -1e14;
    dp[0][0] = 0;
    for(int i =1;i<=n+m;i++)
    {
        for(int j = 0;j<=all;j++) dp[i&1][j] = -1e14;
        for(int j = 0;j<=all;j++)
        {
            dp[i&1][j] = max(dp[(i-1)&1][j],dp[i&1][j]);
                int state = j - a[i].c;
                if(state>=0 && state<=all && dp[(i-1)&1][state] > -1e14/2)
                    dp[i&1][j] = max(dp[i&1][j],dp[(i-1)&1][state] + a[i].v);
        }
    }
    long long  res = 0;
    for(int  i = 0;i<=all;i++) res = max(res,dp[(n+m)&1][i]);
    cout<<res;
    return 0;
}
#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...