HDU - 6000(Wash)

题意:

有n件衣服,有m1 个洗衣机,m2 个烘干机,给出每个洗衣机洗一件衣服的工作时间,和每个烘干机烘干一件衣服的的工作时间, 每个机器在一个时间段只能处理一件衣服,问洗完并烘干这n件衣服最短时间是多少。

题解:

使用两个优先队列记录每台机器总的工作时间,通过贪心的思想最先洗完的衣服用较慢的烘干机,后洗完的衣服用较快的烘干机。

#include<bits/stdc++.h>
#define maxn 1000100
typedef long long int ll;
using namespace std;

struct node
{
    ll x,base;
    bool operator >(const node a)const
    {
        return x>a.x;
    }
}edg[maxn];
ll a[maxn];
priority_queue<node,vector<node>,greater<node> > q1;
priority_queue<node,vector<node>,greater<node> > q2;
int main()
{
    int T,n,m1,m2;
    ll x;
    node ed;
    scanf("%d",&T);
    for(int Case=1;Case<=T;Case++)
    {
        while(!q1.empty())
            q1.pop();
        while(!q2.empty())
            q2.pop();
        scanf("%d%d%d",&n,&m1,&m2);
        for(int i=0;i<m1;i++)
        {
            scanf("%lld",&x);
            ed.x=ed.base=x;
            q1.push(ed);
        }
        for(int i=0;i<m2;i++)
        {
            scanf("%lld",&x);
            ed.x=ed.base=x;
            q2.push(ed);
        }
        ll sum=0;
        for(int i=0;i<n;i++)
        {
            ed=q1.top();
            q1.pop();
            a[i]=ed.x;//每台洗衣机工作时间
            ed.x+=ed.base;
            q1.push(ed);
        }
        for(int i=n-1;i>=0;i--)
        {
            ed=q2.top();
            q2.pop();
            sum=max(sum,a[i]+ed.x);
            ed.x+=ed.base;
            q2.push(ed);
        }
        printf("Case #%d: %lld\n",Case,sum);
    }

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值