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--;
}
}