#include <bits/stdc++.h>
#define NMAX 2000
#define LOG 19
#define ll long long int
#define MOD 30103
#define INF (ll)1e17
using namespace std;
ifstream fin("cod.in");
ofstream fout("cod.out");
struct triplet
{
int c,f,v;
} a[NMAX+1],b[NMAX+1];
int n,m;
bool cmp(triplet x, triplet y)
{
return x.f > y.f;
}
ll dp[50*NMAX+1];
void add_dp(int j,int c)
{
for(int i=NMAX*50;i>=j;i--)
{
dp[i] = min(dp[i],dp[i-j] + c);
}
}
void remove_dp(int j,int c)
{
for(int i=0;i+j<=NMAX*50;i++)
{
dp[i] = min(dp[i],dp[i+j] - c);
}
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> a[i].c >> a[i].f >> a[i].v;
}
cin >> m;
for(int i=1;i<=m;i++)
{
cin >> b[i].c >> b[i].f >> b[i].v;
}
sort(a+1,a+n+1,cmp);
sort(b+1,b+m+1,cmp);
for(int i=1;i<=NMAX*50;i++)
{
dp[i] = INF;
}
dp[0] = 0;
int j=1;
for(int i=1;i<=m;i++)
{
while(j<=n && a[j].f >= b[i].f)
{
add_dp(a[j].c,a[j].v);
j++;
}
remove_dp(b[i].c, b[i].v);
}
ll mn=INF;
for(int i=0;i<=50*NMAX;i++)
{
mn=min(mn,dp[i]);
}
cout << -mn;
}
| # | 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... |