【题目】
【分析】
一道贪心题,但考场上没贪出来
维护两个堆,分别存洗衣服和烘干衣服的时间
每次加进来一件衣服,就在之前最早结束的那一台机器里操作,这样会是最优的
洗衣服和烘干衣服都这样搞,最后再用最大配最小的原则求最大值就行了
【代码】
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
using namespace std;
int w[N],d[N];
long long time1[N],time2[N];
priority_queue<pair<long long,int> >q1,q2;
int main()
{
// freopen("farewell.in","r",stdin);
// freopen("farewell.out","w",stdout);
int l,n,m,i;
pair<long long,int>x;
scanf("%d%d%d",&l,&n,&m);
while(!q1.empty()) q1.pop();
while(!q2.empty()) q2.pop();
for(i=1;i<=n;++i) scanf("%d",&w[i]),q1.push(make_pair(-w[i],i));
for(i=1;i<=m;++i) scanf("%d",&d[i]),q2.push(make_pair(-d[i],i));
for(i=1;i<=l;++i)
{
x=q1.top();q1.pop();time1[i]=-x.first;
q1.push(make_pair(-time1[i]-w[x.second],x.second));
}
for(i=1;i<=l;++i)
{
x=q2.top();q2.pop();time2[i]=-x.first;
q2.push(make_pair(-time2[i]-d[x.second],x.second));
}
long long Max=0;
for(i=1;i<=l;++i)
Max=max(Max,time1[i]+time2[l-i+1]);
printf("%lld",Max);
// fclose(stdin);
// fclose(stdout);
return 0;
}