- 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; }
继续阅读与本文标签相同的文章
上一篇 :
王坤杨的自我介绍
-
数十万共享雨伞不翼而飞,创始人却高兴的要命!网友:赚翻了
2026-05-18栏目: 教程
-
滴滴 这是一见钟情的感脚
2026-05-18栏目: 教程
-
以实践的方式讨论:N-Gram原理与其应用
2026-05-18栏目: 教程
-
Hi拼团,第六代云服务器拼团购买更便宜,低至148元/年
2026-05-18栏目: 教程
-
汇编(五)栈、CPU提供的栈机制、push、pop指令
2026-05-18栏目: 教程
