流水作业调度问题

时间:2022-08-08 11:30:25
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <algorithm>
 5 using namespace std;
 6 const int N=100;
 7 struct node {
 8     int time;
 9     int index;
10     bool group;
11 };
12 
13 bool cmp(node a,node b)
14 {
15     return a.time<b.time;
16 }
17 int main()
18 {
19     int i,j,k,n;
20     int a[N]={0},b[N]={0};
21     int best[N];
22     node c[N];
23     scanf("%d",&n);
24     for(i=0;i<n;i++) {
25         scanf("%d%d",&a[i],&b[i]);
26     }
27     for(i=0;i<n;i++) {
28         c[i].time=a[i]>b[i]?b[i]:a[i];
29         c[i].index=i;
30         c[i].group=a[i]<=b[i];
31         
32     }
33     sort(c,c+n,cmp);
34     j=0;
35     k=n-1;
36     for(i=0;i<n;i++) {
37         if(c[i].group) {
38             best[j++]=c[i].index;
39         }
40         else {
41             best[k--]=c[i].index;
42         }
43     }
44     j=a[best[0]];
45     k=j+b[best[0]];
46     for(i=1;i<n;i++)
47     {
48         j+=a[best[i]];
49         k=j<k?(k+b[best[i]]):j+b[best[i]];
50     }
51     printf("%d\n",k);
52     for(i=0;i<n;i++) {
53         printf("%d ",best[i]+1);
54     }
55     printf("\n");
56     return 0;
57 }
58 /*
59 6
60 2 5 
61 7 3
62 6 2
63 4 7
64 6 9
65 8 2
66 
67 35
68 1 4 5 2 6 3
69 */