流水线调度

来源:互联网 发布:网络营销策划书的前言 编辑:程序博客网 时间:2024/04/28 02:21

https://biancheng.love/problem/495/index

F工厂收到了任务,要在发售日期之前把许多其他厂商生产的部件总装成一部一部Nintendo Switch。

F工厂有n条生产线用于生产Nintendo Switch,每条生产线都能完成组装一部Nintendo Switch所需要的m道工序,只是需要的时间不同。另外产品可在不同的流水线上完成不同的工序且流水线切换时间及进出流水线时间忽略不计,但一件产品完成一道工序只能在同一条流水线上做,不能中断。

F工厂的老板向你们提出这样的问题:

已经知道,n条流水线完成m道工序所需要的时间各是多少。

那么,完成组装一部Nintendo Switch所需要的最短时间是多少?

本题即为一道流水线调度问题,但本题将其进行了简化,(比如流水线切换不花费时间)。
本题经简化后,不考虑流水线调换花费的时间,所以只需要依次找出每一个工序在所有流水线中花费时间,最后将所有最短时间求和即可。

#include <cstdio>#include <cmath>#include <cstring>using namespace std;int a[1000][1000];int main(){    int t;    scanf("%d",&t);    int flag=0;    while(t>0)    {        flag++;        int m,n;        scanf("%d %d",&n,&m);        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)                scanf("%d",&a[i][j]);        long long b=0;        for(int k=0;k<m;k++)        {            int    temp=a[0][k];            for(int l=1;l<n;l++)//找出第k个工序的最小值            {                if(temp>a[l][k])                    temp=a[l][k];            }            b=b+temp;//将找到的最小值依次相加求和即可        }        printf("Case #%d: %lld\n",flag,b);        t--;    }  }
0 0
原创粉丝点击