제출 #240215

#제출 시각아이디문제언어결과실행 시간메모리
240215m3r8Cloud Computing (CEOI18_clo)C++14
0 / 100
28 ms1280 KiB
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <utility>
#include <functional>

#define ll long long
#define INF 10e12
#define MINF -INF
#define N 2020

#define lli std::pair<long long,std::pair<long long,int>>

std::vector<lli> ord;
std::vector<lli> com;
ll dp[N][55];

int main(void){
  int n,m;
  scanf("%d",&n);
  int c,f,v;
  for(int i = 0;i<n;i++){
    scanf("%d %d %d",&c,&f,&v);
    com.push_back({(ll)f,{(ll)v,c}});
  };
  scanf("%d",&m);
  for(int i = 0;i<m;i++){
    scanf("%d %d %d",&c,&f,&v);
    ord.push_back({(ll)f,{(ll)v,c}});
  };
  std::sort(com.begin(),com.end(),std::less<lli>());
  std::sort(ord.begin(),ord.end(),std::less<lli>());

  /*
  for(auto i: com){
    printf("%lld %lld %d\n",i.first,i.second.first,i.second.second);  
  };
  puts("");
  for(auto i: ord){
    printf("%lld %lld %d\n",i.first,i.second.first,i.second.second);  
  };
  puts("");
  */

  for(int i = 0;i<N;i++){
    for(int j = 0;j<55;j++){
      dp[i][j] = MINF;
    };  
  };

  for(int j = 0;j<m;j++){
    dp[j][0] = ord[j].second.first;  
  };
  ll mx = 0;

  for(int i = 0;i<n;i++){
    for(int j = m-1;j>=0;j--){
      int prevC = ord[j].second.second - com[i].second.second;
      int prevM = j;
      ll val = 0;
      for(int k = ord[j].second.second;k>=0;k--){
        if(com[i].first >= ord[j].first){
          //printf("%d %d %d %lld %lld %lld %lld %d\n",i,j,k,dp[j][k],com[i].first,ord[j].first,ord[j].second.first,ord[j].second.second);
          while(prevC < 0){
            //printf("%d %d\n",prevC,prevM);
            if(prevM == 0){
              prevC = 0;  
              break;
            };
            val += ord[prevM].second.first;
            prevM--;
            prevC += ord[prevM].second.second;  
          };
          if(dp[prevM][prevC] != MINF){
            dp[j][k] = std::max(dp[prevM][prevC] + val - com[i].second.first, dp[j][k]);  
            if(k == ord[j].second.second){
              mx = std::max(mx,dp[j][k]);
            };
          };
          //printf("%d %d %d %lld %lld %lld %lld %d\n",i,j,k,dp[j][k],com[i].first,ord[j].first,ord[j].second.first,ord[j].second.second);
          //printf("%lld %d %d\n",val,prevC,prevM);
          //puts("");
          if(prevC > 0 || prevM != 0){
            prevC--;
          };
        };
      };
    };  
  };
  printf("%lld\n",mx);
  return 0;
};


컴파일 시 표준 에러 (stderr) 메시지

clo.cpp: In function 'int main()':
clo.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&n);
   ~~~~~^~~~~~~~~
clo.cpp:23:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d",&c,&f,&v);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~
clo.cpp:26:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&m);
   ~~~~~^~~~~~~~~
clo.cpp:28:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d",&c,&f,&v);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...