ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

奥赛一本通 1425 加工生产调度

奥赛一本通 1425 加工生产调度 1425 加工生产调度题目大意$n$ 个产品都需要先后在 $A, B$ 两个车间加工给出每个产品分别在两个车间的加工时间要如何排序才能使得总时间最短。知识要点贪心、排序解题思路$A$ 车间必然是一直加工产品最后空闲时间等待 $B$ 车间而 $B$ 车间则可以先等待 $A$ 车间然后一直加工完所有产品。显然加工的总时间是固定的因此需要使空闲时间最小化。对于第一个产品它在 $A$ 车间的加工必然最短这样可以让 $B$ 车间等待时间少对于最后一个产品它在 $B$ 车间的加工必然最短这样可以让 $A$ 车间等待时间少。不难发现确定第一个或最后一个产品并不会影响其他产品的加工顺序因此持续寻找加工时间的最小值将它放在前面或后面完成即可。参考代码#includebits/stdc.husingnamespacestd;constintN10005;structNode{intv,i;//最小值、编号}P[N];inta[N],b[N],ans[N];intmain(){intn;scanf(%d,n);for(inti1;in;i)scanf(%d,a[i]);for(inti1;in;i)scanf(%d,b[i]);for(inti1;in;i)P[i]{min(a[i],b[i]),i};for(inti1;in;i)for(intji1;jn;j)//一本通没有设置 spjif(P[i].vP[j].v)swap(P[i],P[j]);//使用选择排序才能通过intl1,rn;//确定前后的位置for(inti1;in;i)if(P[i].va[P[i].i])ans[l]P[i].i;elseans[r--]P[i].i;intA0,B0;for(inti1;in;i){Aa[ans[i]];Bmax(A,B)b[ans[i]];}printf(%d\n,B);for(inti1;in;i)printf(%d ,ans[i]);return0;}
返回列表