有兩條裝配線,編號分別為1和2。每一條裝配線上有個n裝配點,將第i條線上的第個j裝配點記為si,j,設在裝配點si,j的裝配時間為ai,j。假設要裝配一輛汽車,將汽車底盤從進廠點送入第i號裝配線,需要時間ei。在裝配點si,j裝配後,如果汽車傳送到同一號裝配線的裝配點si,j+1進行裝配,則傳送不需要時間。如果汽車完成裝配點si,j的工作後傳送到另一號裝配線進行下一步的工作,則需要傳送時間ti,j。汽車在裝配點si,n裝配後,將汽車成品從裝配線上退下來,需要花費時間xi。裝配線排程問題是如何確定每乙個裝配點的裝配需要在哪號線上進行,使得當汽車成品出來時,花費的總時間最少。
輸入的第一行包含乙個正整數n(1<=n<=1000)
第二行包含四個正整數,分別是傳入裝配線所用時間e1,e2和退出裝配線所用時間x1,x2。(01,j和a2,j(0i,j
<=1000)(1<=j<=n)。
接下來的兩行每行有n - 1個正整數,分別描述傳送時間t1,j和t2,j(0<=ti,j
<=150)(1<=j<=n-1)。
輸出乙個正整數表示一輛汽車最快需要多少時間出廠。
10 20 40 30
50 100 1000 50
200 200 200 65
10 10 10
20 20 20
#include
#include
using namespace std;
const int n=1000;
int f1[n], f2[n], l1[n], l2[n], f, l; //f陣列存放當前子問題最快裝配問題,l陣列存放子問題前一點的裝配線
void dpfastestway(int a1, int a2, int t1, int t2, int e1, int e2, int x1, int x2, int n)
else
if(f2[j-1]+a2[j]<=f1[j-1]+t1[j-1]+a2[j])
else
}if(f1[n]+x1<=f2[n]+x2)
else
}void printstation(int l1, int l2,int l, int n) //列印路線
{ int i=l;
cout<<"line "<
<<", statioin "<
<
1; j--) { if(i==1) { i=l1[j]; cout<<"line "<
<<", station "<
<
裝配線排程問題
裝配一輛汽車,有兩條裝配線分別有n個裝配點,每條裝配線在進出所花時間為e i x i i 0,1 每個裝配點所需時間a i j i 0,1 j 0,1,n 1 從一條裝配線i的第j個裝配點到另一條裝配線的第j 1個裝配點所需時間t i j 對於圖來說 截至 演算法導論 s1,1 處所需時間 e1 a...
裝配線排程
問題描述 汽車生產工廠共有兩條裝配線,每條有n個裝配站 裝配線i 的第j 個裝配站表示為si,j,在該站的裝配時間為ai,j。乙個汽車底盤進入工廠,然後進入裝配線i i 為1或2 花費時間為ei。在通過一條線的第j 個裝配站後,這個底盤來到任一條線的第 j 1 個裝配站。如果它留在相同的裝配線,則沒...
動態規劃 裝配線排程問題
這個問題是在演算法導論的動態規劃章節有提到,由於問題敘述起來太繁雜就直接省略。命名規則與書上的偽 是一致的,只是用c 具體語言實現了而已。動態規劃問題 裝配線排程問題 pragma once class asl include alspro.h include include using names...