제출 #1288299

#제출 시각아이디문제언어결과실행 시간메모리
1288299simona1230Two Dishes (JOI19_dishes)C++20
5 / 100
101 ms15992 KiB
#include <bits/stdc++.h>

using namespace std;
const long long maxn=1e6+5;

long long n,m;
long long a[maxn],s[maxn],p[maxn];
long long b[maxn],t[maxn],q[maxn];
long long ta[maxn],tb[maxn];
long long pa[maxn],pb[maxn];

void read()
{
    cin>>n>>m;
    for(long long i=1;i<=n;i++)
        cin>>a[i]>>s[i]>>p[i];
    for(long long i=1;i<=m;i++)
        cin>>b[i]>>t[i]>>q[i];

    for(long long i=1;i<=n;i++)
        ta[i]=ta[i-1]+a[i],
        pa[i]=pa[i-1]+p[i];
    for(long long i=1;i<=m;i++)
        tb[i]=tb[i-1]+b[i],
        pb[i]=pb[i-1]+q[i];
}

void subt()
{
    int j=1;
    while(j<=m&&tb[j]<=s[1])j++;
    long long ans=pb[j-1];
    for(int i=1;i<=n;i++)
    {
        while(j>1&&tb[j-1]+ta[i]>s[1])j--;
        if(ta[i]<=s[i])ans=max(ans,pa[i]+pb[j-1]);
    }
    cout<<ans<<endl;
}

long long dp[2001][2001];
void solve()
{
    for(long long i=0;i<=n;i++)
    {
        for(long long j=0;j<=m;j++)
        {
            if(i==0&&j==0)continue;
            if(i==0)dp[i][j]=dp[i][j-1]+((ta[i]+tb[j])<=t[j])*q[j];
            else if(j==0)dp[i][j]=dp[i-1][j]+((ta[i]+tb[j])<=s[i])*p[i];
            else dp[i][j]=max(dp[i-1][j]+((ta[i]+tb[j])<=s[i])*p[i],dp[i][j-1]+((ta[i]+tb[j])<=t[j])*q[j]);
        }
    }

    cout<<dp[n][m]<<endl;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	read();
	subt();
	return 0;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...