- P1248 加工生产调度
- 题意:某个产品i在A、B两车间加工的时间分别为Ai、Bi。怎样安排这n个产品的加工顺序,才能使总的加工时间最短。
- 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A、B两车间加工完毕的时间。
- 思路:构造C数组c[i]为取a[i],b[i]小的时间,小-大排序,然后构造加工顺序,根据排完序的数组C判断 一下当前值是
- A还是B如果是A则从前往后放,是B则从后往前放。最后模拟一遍加工过程,计算时间即可。
-
#include<bits/stdc++.h> using namespace std; #define maxn 1234 int n,t,a[maxn],ans[maxn]; int b[maxn],head,tail; struct node { int w,id; bool operator<(const node&x)const { return w<x.w; } } c[maxn]; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&a[i]); for(int i=1; i<=n; i++) { scanf("%d",&b[i]); c[i].w=min(b[i],a[i]); c[i].id=i; } sort(c+1,c+1+n); tail=n+1; head=0; for(int i=1; i<=n; i++) { if(c[i].w==a[c[i].id]) ans[++head]=c[i].id; else ans[--tail]=c[i].id; } head=tail=0; for(int i=1; i<=n; i++) { head+=a[ans[i]]; if(head>tail)tail=head; tail+=b[ans[i]]; } printf("%d\n",tail); for(int i=1; i<=n; i++) { printf("%d",ans[i]); if(i==n)printf("\n"); else printf(" "); } return 0; }
P1248 加工生产调度-贪心
猜你喜欢
转载自blog.csdn.net/BePosit/article/details/85078118
今日推荐
周排行