码迷,mamicode.com
首页 > 其他好文 > 详细

Wash(HDU_6000,优先队列+贪心)

时间:2018-10-01 20:38:14      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:ret   name   one   pre   ref   传送门   tmp   工作   代码   

传送门:Wash!!

题意:

  有L件衣服要洗,有N台洗衣机,M台烘干机,给出了每台机器完成一件衣服的工作时间(每台机器同时只能完成一件衣服),问怎么选择机器才能使得总的工作时间是最短的。

思路:

  用两个优先队列,一个表示洗衣机,一个表示烘干机。先让洗衣机进行工作,最后一件洗出来的衣服对应着结束的清洗工作时间是最长的,令这个时间加上最短的烘干时间。对应最终烘干结束的时间是最短的。同样倒数第二件也是这种情况,以此类推,,,,,,

  即最长的时间加最短时间,一直加到最后这样最终的结果是最小的。如果令最长的洗衣时间加上最长的烘干时间,最后的总的结束时间一定要比最长的洗衣时间加上最短的烘干时间要长,不是最优解。

PS:  

  注意数据范围!!

代码:

技术分享图片
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e7+10;
typedef long long ll;
struct node
{
    ll x;//工作时间
    ll en;//工作到目前为止的结束时间
    friend bool operator<(node a,node b)
    {
        return a.en > b.en;
    }
} tmp;
priority_queue<node> wash;
priority_queue<node> dry;
int l,n,m;
ll a[maxn];

int main()
{
    int T,cnt = 1;
    scanf("%d",&T);
    while(T--)
    {
        while(!wash.empty()) wash.pop();
        while(!dry.empty())dry.pop();
        scanf("%d%d%d",&l,&n,&m);
        for(int i = 0; i<n; i++)
        {
            scanf("%lld",&tmp.x);
            tmp.en = tmp.x;
            wash.push(tmp);
        }
        for(int i = 0; i<m; i++)
        {
            scanf("%lld",&tmp.x);
            tmp.en = tmp.x;
            dry.push(tmp);
        }
        for(int i = 0; i<l; i++)
        {
            tmp = wash.top();//取出最短工作时间的机器来洗衣服
            a[i] = tmp.en;
            tmp.en += tmp.x;//结束时间加一段工作时间
            wash.pop();
            wash.push(tmp);//工作结束后投入等待序列
        }
        ll ans = 0;
        for(int i=l-1; i>=0; i--)
        {
            tmp = dry.top();
            ans = max(ans, a[i]+tmp.en);//更新洗衣服的结束时间
            tmp.en += tmp.x;
            dry.pop();
            dry.push(tmp);
        }
        printf("Case #%d: %lld\n",cnt++,ans);
    }
    return 0;
}
/*
样例输入:
2
1 1 1
1200
34
2 3 2
100 10 1
10 10
样例输出:
Case #1: 1234
Case #2: 12
*/
View Code

 

Wash(HDU_6000,优先队列+贪心)

标签:ret   name   one   pre   ref   传送门   tmp   工作   代码   

原文地址:https://www.cnblogs.com/sykline/p/sykailine.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!