제출 #823889

#제출 시각아이디문제언어결과실행 시간메모리
82388912345678Cloud Computing (CEOI18_clo)C++17
100 / 100
614 ms2136 KiB
#include <bits/stdc++.h> using namespace std; const int nx=2e3+5, cx=51; int n, m, c, f, p; long long dp[2][nx*cx], ans=0; struct com { bool type; int c, f, v; com(bool type, int c, int f, int v): type(type), c(c), f(f), v(v){} bool operator< (const com &o) { if (f==o.f) return type<o.type; return f<o.f; } }; vector<com> v; int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n; for (int i=0; i<n; i++) cin>>c>>f>>p, v.push_back(com(1, c, f, p)); cin>>m; for (int i=0; i<m; i++) cin>>c>>f>>p, v.push_back(com(0, c, f, p)); sort(v.begin(), v.end()); for (int i=0; i<nx*cx; i++) dp[0][i]=dp[1][i]=-1e18; for (int i=n+m-1; i>=0; i--) { int cur=i%2, pv=1-cur; if (i==n+m-1) dp[pv][0]=0; com cr=v[i]; for (int j=0; j<nx*cx; j++) dp[cur][j]=dp[pv][j]; if (cr.type==1) for (int j=cr.c; j<nx*cx; j++) dp[cur][j]=max(dp[cur][j], dp[pv][j-cr.c]-cr.v); else for (int j=0; j+cr.c<nx*cx; j++) dp[cur][j]=max(dp[cur][j], dp[pv][j+cr.c]+cr.v); } for (int i=0; i<nx*cx; i++) ans=max(ans, dp[0][i]); cout<<ans; }
#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...