【loj6035】【雅礼集训 2017 Day4】洗衣服(贪心,优先队列)

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

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

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

直接维护即可。

代码如下:

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值