HDU 6000 - Wash

/*
HDU 6000 - Wash [ 贪心 ]
题意:
	L 件衣服,N 个洗衣机,M 个烘干机,给出每个洗衣机洗一件衣服的时间和烘干机烘干一件衣服的时间,问需要的最少时间是多少
分析:
	先求出L件衣服最优洗衣时间的数组,再求出最优烘干时间的数组
	然后排序按最小值+最大值的思路贪心,取最大值
	可以看成排序后两数组咬合
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1e5+5;
const int MAXL = 1e6+5;
struct Node {
    LL x; int y;
    friend operator < (Node a, Node b) {
        if (a.x == b.x) return a.y > b.y;
        return a.x > b.x;
    }
};
priority_queue<Node> Q;
int t, l, n, m;
int w[N], d[N];
LL a[MAXL], b[MAXL];
void solve(int w[], int n, LL a[])
{
    while (!Q.empty()) Q.pop();
    for (int i = 1; i <= n; i++) Q.push(Node{w[i], w[i]});
    for (int i = 1; i <= l; i++)
    {
        Node tmp = Q.top(); Q.pop();
        a[i] = tmp.x;
        tmp.x += tmp.y;
        Q.push(tmp);
    }
}
int main()
{
    scanf("%d", &t);
    for (int tt = 1; tt <= t; tt++)
    {
        scanf("%d%d%d", &l, &n, &m);
        for (int i = 1; i <= n; i++) scanf("%d", &w[i]);
        for (int i = 1; i <= m; i++) scanf("%d", &d[i]);
        solve(w, n, a);
        solve(d, m, b);
        LL ans = 0;
        for (int i = 1; i <= l; i++)
        {
            ans = max(ans, a[i] + b[l-i+1]);
        }
        printf("Case #%d: %lld\n", tt, ans);
    }
}

  

时间: 2024-10-18 21:52:01

HDU 6000 - Wash的相关文章

HDU - 6000 Wash(优先队列+贪心)

题意:已知有L件衣服,M个洗衣机,N个烘干机,已知每个机器的工作时间,且每个机器只能同时处理一件衣服,问洗烘完所有衣服所需的最短时间. 分析: 1.优先队列处理出每件衣服最早的洗完时间. 2.优先队列处理出每件衣服最早的烘完时间. 3.用最大的洗完时间与最小的烘完时间相加,取最大值. #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath&

【hdu 6000】Wash

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 因为每件衣服都是没有区别的. 只有洗衣机不同会影响洗衣时间. 那么我们把每台洗衣机洗衣的时间一开始都加入到队列中. 比如{2,3,6,7} 这个队列里面的数字就代表了如果某件衣服用这台洗衣机洗的话,要在什么时刻洗好. 对于每一件衣服i. 取出队列的头. 这里为2 那么就a[i] = 2,表示第i件衣服最早在a[i] = 2时刻洗好 然后再把2+t[i]加入到队列中即{3,2+t[i],6,7} (这里t[i]即等于2) 每次都取

hdu 6166 Senior Pan

地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6166 题目: Senior Pan Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 245    Accepted Submission(s): 71 Problem Description Senior Pan fails i

hdu 1561 The more, The Better 树状DP

The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5844    Accepted Submission(s): 3476 Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝

HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))

传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   Problem Description 我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c.我们称图G是一个竞赛图,当且仅当它是一个有向图且它的基图是完全图.换句 话说,将完全图每条边定向将得到一个竞赛图.下图展示的是一个有4个顶点的竞

hdu 3308 LCIS(线段树区间合并)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5792    Accepted Submission(s): 2513 Problem Description Given n integers. You have two

HDU 5317 RGCDQ

RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 323    Accepted Submission(s): 162 Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and mo

HDU 1561

The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5618    Accepted Submission(s): 3345 Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物

hdu 5008(2014 ACM/ICPC Asia Regional Xi&#39;an Online ) Boring String Problem(后缀数组&amp;二分)

Boring String Problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 219    Accepted Submission(s): 45 Problem Description In this problem, you are given a string s and q queries. For each que