제출 #1355131

#제출 시각아이디문제언어결과실행 시간메모리
1355131eliCloud Computing (CEOI18_clo)C++20
36 / 100
527 ms3920 KiB
#include<bits/stdc++.h>
using namespace std;

#define endl "\n"
#define out(x) #x <<" = "<<x<<"; "
const long long MAX = 2 * 1e3 + 10, MAXC = 1e2 + 10;
int n, m, a, b, c;
long long dp[2][MAX][MAXC], ans;

struct Comp{
    int cores, f, v;
    inline friend bool operator < (Comp a, Comp b){
        return a.f <= b.f;
    }
}comp[MAX];

struct Queries{
    int cores, f, v, ind;
    inline friend bool operator < (Queries a, Queries b){
        return a.f <= b.f;
    }
}q[MAX];

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n;
    for(int i = 1; i <= n; i++){
        cin>>comp[i].cores>>comp[i].f>>comp[i].v;
    }
    sort(comp + 1, comp + 1 + n);
    comp[n + 1] = {0, int (1e9), int (1e9)};

    cin>>m;
    for(int i = 1; i <= m; i++){
        cin>>q[i].cores>>q[i].f>>q[i].v;
        q[i].ind = i;
    }

    sort(q + 1, q + 1 + m);

    for(int i = 1; i <= m; i++){
        for(int j = 1; j <= n + 1; j++){
            for(int k = 0; k <= 100; k++){

                dp[i % 2][j][k] = max(dp[(i - 1) % 2][j][k], dp[i % 2][j - 1][k]);
                if(q[i].f <= comp[j].f){
                    if(k >= q[i].cores) dp[i % 2][j][k] = max(dp[i % 2][j][k], dp[(i - 1) % 2][j][k - q[i].cores] + q[i].v); 
                    
                }
                if(k + comp[j - 1].cores <= 100) dp[i % 2][j][k] = max(dp[i % 2][j][k], dp[i % 2][j - 1][k + comp[j - 1].cores] - comp[j - 1].v);
                //ans = max (ans, dp[i % 2][j][k]);

            }
        }
    }

    cout<<dp[m%2][n + 1][0];
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…