zoukankan      html  css  js  c++  java
  • Luogu2751 [USACO Training4.2]工序安排Job Processing

    你怎么搞他时间都是一样的,考虑贪心

    计算第一轮的时间就直接拿堆维护每个机器的结束时间,
    每次取最早的,更新每个物品的答案

    考虑第二轮,每次取上轮结束时间最晚的放到结束时间最早的机器里
    这样一定是最优的

    由于 a 类机器和 b 类机器是分开工作的,所以就直接这样贪心就好了


     代码:

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cctype>
    #include <cstdio>
    #include <queue>
    using namespace std;
    
    const int MAXN = 1005, MAXM = 35;
    
    struct Node{
    	int tim, len;
    	bool operator < (const Node& b) const {
    		return tim > b.tim;
    	}
    }a[MAXM], b[MAXM];
    int n, ma, mb, maxans;
    int fa[MAXN], fb[MAXN];
    priority_queue<Node> q;
    
    int main() {
    	scanf("%d%d%d", &n, &ma, &mb);
    	for (int i = 1; i <= ma; ++i) {
    		scanf("%d", &a[i].len);
    		a[i].tim = a[i].len;
    		q.push(a[i]);
    	}
    	for (int i = 1; i <= mb; ++i) {
    		scanf("%d", &b[i].len);
    		b[i].tim = b[i].len;
    	}
    	for (int i = 1; i <= n; ++i) {
    		Node tmp = q.top();
    		q.pop();
    		fa[i] = tmp.tim;
    		tmp.tim += tmp.len;
    		q.push(tmp);
    	}
    	printf("%d ", fa[n]);
    	while (q.size()) q.pop();
    	for (int i = 1; i <= mb; ++i) 
    		q.push(b[i]);
    	for (int i = n; i >= 1; --i) {
    		Node tmp = q.top();
    		q.pop();
    		maxans = max(maxans, fb[i] = fa[i] + tmp.tim);
    		tmp.tim += tmp.len;
    		q.push(tmp);
    	}
    	printf("%d
    ", maxans);
    	return 0;
    }
  • 相关阅读:
    输入输出
    SpringCloud组件之HystrixDashbord
    SpringCloud组件之zuul的使用
    SpringCloud组件之Hystrix组件的使用
    负载均衡算法示例
    JavaScript基础知识总结
    SpringBoot收藏
    java虚拟机详细图解10--JVM类加载机制及类加载过程
    java虚拟机详细图解9--JVM机器指令集
    java虚拟机详细图解8--JVM运行时数据区
  • 原文地址:https://www.cnblogs.com/xcysblog/p/9800815.html
Copyright © 2011-2022 走看看