zoukankan      html  css  js  c++  java
  • 流水线作业调度问题

    题目:

    感觉有些 , 还要思考的地方 , 留下了 ,以后看。。。。

    流水线作业调度问题
    Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB
    Total Submission: 91   Submission Accepted: 12
     
    Description
    N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。
    流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。
    Input
    输入包括若干测试用例,每个用例输入格式为:
    第1行 一个整数代表任务数n,当为0时表示结束
    第2行至第n+1行每行2个整数,代表任务在M1,M2上所需要的时间
    Output
    输出一个整数,代表执行n个任务的最短时间
    Sample Input
    Original Transformed
    1
    1 2
    0
    
    Sample Output
    Original Transformed
    3
    
    #include<stdio.h>
    #include<stdlib.h>
    struct node
    {
        int m1,m2;
    };
    struct node time[2][20000];
    int cmp1(const void *p1,const void *p2)
    {
        return ( (*(struct node *)p1).m1>(*(struct node *)p2).m1? 1:-1);
    }
    int cmp2(const void *p1,const void *p2)
    {
        return ( (*(struct node *)p1).m2>(*(struct node *)p2).m2? -1:1 );
    }
    int main()
    {
        int n,i,a,b,q,p,time1,time2;
        while(scanf("%d",&n)!=EOF&&n)
        {
            q=p=0;
            time1=time2=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&a,&b);
                if(b>=a)
                    {
                        time[0][q].m1=a;
                        time[0][q++].m2=b;
                    }
                    else{
                        time[1][p].m1=a;
                        time[1][p++].m2=b;
                    }
            }
            qsort(time[0],q,sizeof(time[0][0]),cmp1);//m1  降序
            qsort(time[1],p,sizeof(time[1][0]),cmp2);//m2 升序
            for(i=0;i<q;i++)
            {
               time1+=time[0][i].m1;
               if(time2<time1)
                    time2=time1;
               time2+=time[0][i].m2;
            }
            for(i=0;i<p;i++)
            {
                time1+=time[1][i].m1;
                if(time2<time1)
                    time2=time1;
                time2+=time[1][i].m2;
            }
            printf("%d\n",time2);
        }
        return 0;
    }
  • 相关阅读:
    链表
    求最大子串
    【JavaScript】7-23 币值转换 (20分)
    【JavaScript】7-22 龟兔赛跑 (20分)
    【JavaScript】7-21 求特殊方程的正整数解 (15分)
    【JavaScript】7-20 打印九九口诀表 (15分)
    【JavaScript】7-19 支票面额 (15分)
    【JavaScript】7-18 二分法求多项式单根 (20分)
    【JavaScript】7-17 爬动的蠕虫 (15分)
    【JavaScript】7-16 求符合给定条件的整数集 (15分)
  • 原文地址:https://www.cnblogs.com/napoleon/p/3181204.html
Copyright © 2011-2022 走看看