我们先用优先队列的方式分别处理出只让所有衣服洗完的时间和只让所有衣服烘干的时间。

然后我们考虑怎么分配衣服。

最优情况肯定是让最慢洗完的衣服放进最快烘干的烘干机里面。

直接维护即可。

代码如下:

#include<bits/stdc++.h>

#define L 1000010
#define N 100010
#define ll long long

using namespace std;

struct data
{
    ll time;int id;
    bool operator < (const data &a) const
    {
        return time>a.time;
    }
};

int l,n,m,a[L];
ll tim1[N],tim2[N],ans;

priority_queue<data>wash,dry;//洗衣机和烘干机

int main()
{
    scanf("%d%d%d",&l,&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&tim1[i]);
        wash.push((data){tim1[i],i});
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%lld",&tim2[i]);
        dry.push((data){tim2[i],i});
    }
    for(int i=1;i<=l;i++)
    {
        data u=wash.top();
        wash.pop();
        a[i]=u.time;//记录下每次洗完衣服的时间
        wash.push((data){u.time+tim1[u.id],u.id});
    }
    for(int i=l;i;i--)
    {
        data u=dry.top();
        dry.pop();
        ans=max(ans,u.time+a[i]);//用烘干的时间+洗完这件衣服所需时间即为处理完这件衣服需要的总时间
        dry.push((data){u.time+tim2[u.id],u.id});
    }
    printf("%lld\n",ans);
    return 0;
}
12-23 08:13