• 加工生产调度/爬山Mountain Climbing


    洛咕

    洛咕

    有N个产品,这N个产品必须先在A车间加工后再到B车间加工.产品i在A、B两车间加工的时间分别为Ai、Bi.怎样安排这n个产品的加工顺序,才能使总的加工时间最短.这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A、B两车间加工完毕的时间。

    这是一个很经典的贪心模型.我们把这N件物品按照两个时间的最小时间从小到大排序.然后如果最小时间是由A[i]得到的就放在前面做,如果最小时间是由B[i]得到的就放在后面做(因为本题贪心思想就是机器A不停工作,然后让机器B的等待时间+最后机器A的等待时间最短),这样得到的序列就是最优加工顺序,然后求出最优时间就很简单了.

    加工生产调度需要输出时间和顺序,我就放这道题的代码了.然后两道题的读入有点不同,注意一下就行.

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    #define ll long long
    using namespace std;
    inline int read(){
        int x=0,o=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')o=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*o;
    }
    const int N=25005;
    int b[N],c[N],d[N];
    struct ppx{int up,down,minn,id;}a[N];
    inline bool cmp(const ppx &x,const ppx &y){return x.minn<y.minn;}
    int main(){
    	int n=read();
    	for(int i=1;i<=n;++i){
    		a[i].up=read();
    		a[i].id=i;
    	}
    	for(int i=1;i<=n;++i){
    		a[i].down=read();
    		a[i].minn=min(a[i].up,a[i].down);
    	}
    	sort(a+1,a+n+1,cmp);
    	int head=0,tail=n+1;
    	for(int i=1;i<=n;++i){
    		if(a[i].minn==a[i].up){
    			b[++head]=a[i].id;
    			c[head]=a[i].up;
    			d[head]=a[i].down;
    		}
    		else{
    			b[--tail]=a[i].id;
    			c[tail]=a[i].up;
    			d[tail]=a[i].down;
    		}
    	}
    	int s=0,t=0;
    	for(int i=1;i<=n;++i){
    		s+=c[i];
    		if(t<s)t=s;
    		t+=d[i];
    	}
    	printf("%d
    ",t);
    	for(int i=1;i<=n;++i)
    		printf("%d ",b[i]);
    	printf("
    ");
        return 0;
    }
    
    
  • 相关阅读:
    消息队列 RPC之间的区别与联系
    RabbitMQ, ZeroMQ, Kafka 是一个层级的东西吗, 相互之间有哪些优缺点?
    嵌入式软件开发工程师谈软件架构的设计
    值得推荐的C/C++框架和库 (真的很强大)
    10.2-嵌入式系统库资源集合
    正则表达式
    vscode代码阅读
    vscode配置
    VSCode的开发环境zsESampleLinux
    MySQL与宿主Linux之间交互式执行命令
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11270611.html
Copyright © 2020-2023  润新知