This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxN = 2e3+5;
const int maxC = 50+5;
struct ds{
int c,f,v;
bool order;
ds(){};
ds(int c, int f, int v, bool order){
this -> c = c;
this -> f = f;
this -> v = v;
this -> order = order;
}
}a[maxN<<1];
bool cmp(ds a, ds b){
return a.f > b.f;
}
int N,M;
int cnt = 0;
int f[2][maxN*maxC]; //f[i][j] = max profit given first i items and j cores with frequency higher than current
int maxF = 0;
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
//freopen("../test.in","r",stdin);
cin >> N;
for(int i = 1; i <= N; ++i){
int c,f,v; cin >> c >> f >> v;
a[++cnt] = ds(c,f,v,false);
maxF = max(maxF,f);
}
cin >> M;
for(int i = 1; i <= M; ++i){
int c,f,v; cin >> c >> f >> v;
if(f > maxF)continue;
a[++cnt] = ds(c,f,v,true);
}
//Put computers first if all freq == 1
if(maxF != 1)sort(a+1,a+cnt+1,cmp);
memset(f,0x80,sizeof(f));
//Initial state
f[0][0] = 0;
f[1][0] = 0;
for(int i = 1; i <= cnt; ++i){
for(int j = 0; j <= N*50; ++j){
//Invalid state
if(f[0][j] < -1e16)continue;
//Ignore the current item
f[1][j] = max(f[1][j],f[0][j]);
//Consider the current item
if(a[i].order == true){
//Not enough cores for the current order
if(j < a[i].c)continue;
f[1][j-a[i].c] = max(f[0][j-a[i].c], f[0][j] + a[i].v);
}
else{
assert(j+a[i].c <= N*50);
f[1][j+a[i].c] = max(f[0][j+a[i].c], f[0][j] - a[i].v);
}
}
swap(f[0],f[1]);
memset(f[1],0x80,sizeof(f[1]));
f[1][0] = 0;
// for(int j = 0; j <= 20; ++j){
// if(f[0][j] < -1e16)cout << "/" << " ";
// else cout << f[0][j] << " ";
// }
// cout << '\n';
}
int res = 0;
for(int i = 0; i <= N*50; ++i){
res = max(res,f[0][i]);
}
cout << res << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |