一.問題描述
用2 台處理機A 和B 處理n個作業。設第i 個作業交給機器A 處理時需要時間ai,若由機器B來處理,則需要時間bi。由於各作業的特點和機器的性能關系,很可能對於某些i,有ai>=bi,而對於某些j,j≠i,有aj<bj,既不能將一個作業分開由2 台機器處理,也沒有一台機器能同時處理2 個作業。設計一個動態規划算法,使得這2 台機器處理完這n個作業的時間最短(從任何一台機器開工到最后一台機器停工的總時間)。
input 6
2 5 7 10 5 2
3 8 4 11 3 4
output 15
二.問題分析
下面是錯誤算法
1 /* 2 算法采用二進制枚舉,但是這樣不對 3 因為同時有兩個處理器 4 */ 5 #include <iostream> 6 #include <cstring> 7 using namespace std; 8 9 int a[100],b[100]; 10 11 int main() 12 { 13 int i,j,k; 14 int num; 15 while(cin>>num) 16 { 17 int min = 0x7fffffff;//INT_MAX 18 memset(a,0,sizeof(a)); 19 memset(b,0,sizeof(b)); 20 for(i=0; i<num; i++) 21 cin>>a[i]; 22 for(i=0; i<num; i++) 23 cin>>b[i]; 24 int s = 1<<num - 1; 25 for(i=0;i<s; i++)//沒有等於,想等差數列和 26 { 27 int sum = 0; 28 for(j=0; j<num; j++) 29 { 30 if(i&(1<<j))//1的話采用a處理機 31 sum += a[j]; 32 else 33 sum += b[j]; 34 } 35 if(sum<min) 36 min = sum; 37 } 38 cout<<min<<endl; 39 40 } 41 return 0; 42 }
明天繼續寫