题目

某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。

某个产品 i 在 A、B 两车间加工的时间分别为 Ai,Bi

怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。

这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A、B 两车间加工完毕的时间

贪心

mind

排序

考虑两个产品, 在A中加工时间a1,a2,在B中加工的时间为b1,b2

假设先加工产品1的方案较优

先加工1, time: a1+max(b1,a2)+b2

先加工2, time: a2+max(b2,a1)+b1

得到: a1+max(b1,a2)+b2 < a2+max(b2,a1)+b1

移项,得到 max(b1,a2)-a2-b1 < max(b2,a1)-b2-a1

手摸一下阔以知道: -min(b1,a2) < -min(b2,a1)

也就是 min(a1,b2)<min(2,b1)

按照这个排序

dalao们都说该式子不具传递性

详见……

怎么求值??

还是考虑两个产品

根据图像显而易见了(from:_ztyqwq)



这种情况下 Aj <= Bi,time = Ai + Bi + Bj



这种情况下 Aj > Bi, time = Ai + Aj + Bj

综上:总时间为:Ai + max(Aj,Bi) + Bj

代码

/*
work by:Ariel
*/
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
const int M = 1e4 + 4;
typedef long long ll;
int read(){
int x = 0,f = 1;char c = getchar();
while(c < '0'||c > '9'){if(c == '-')f = -1;c = getchar();}
while(c >= '0'&&c <= '9'){x = x*10 + c - '0';c = getchar();}
return f*x;
}
struct node{
int a,b,num;
}work[M];
int ans;
bool cmp(node x,node y){
return min(x.a , y.b) < min(y.a , x.b);
}
int tima,timb;
int main()
{
int n = read();
for(int i = 1;i <= n; i++){
work[i].a = read();
work[i].num = i;
}
for(int i = 1;i <= n; i++){
work[i].b = read();
}
sort(work + 1, work + n + 1, cmp);
for(int i = 1;i <= n; i++){
tima += work[i].a;
timb = max(tima, timb) + work[i].b;
}
cout << timb <<"\n";
for (int i = 1; i < n; i++) {
cout << work[i].num << " ";
}
cout << work[n].num;
return 0;
}

最新文章

  1. Dom初
  2. [荐]使用jQuery清空file文件域
  3. 按钮打开链接,按钮click代码
  4. [读书笔记]项目管理实战:Microsoft Project精髓与方法
  5. Jquery 插件库
  6. 【转】IPC-消息队列
  7. WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞
  8. Node中Exports与module.export的使用与区别
  9. WHU 1579 Big data (DP)
  10. layout cannot be resolved or is not a field
  11. 设置ssh免密码登录脚本(hadoop自动化部署脚本一)
  12. 使用Oracle 9i工具管理数据库 - 初学者系列 - 学习者系列文章
  13. BZOJ-1864-[Zjoi2006]三色二叉树(树形dp)
  14. vue获得当前页面URL动态拼接URL复制邀请链接方法
  15. PHP操作Redis常用技巧总结
  16. java 中的包概念
  17. bvlc_reference_caffenet网络权值可视化
  18. 背水一战 Windows 10 (72) - 控件(控件基类): UIElement - UIElement 的位置, UIElement 的布局, UIElement 的其他特性
  19. 显卡安装一直循环在登录界面——解决之-T450安装显卡驱动和cuda7.5发现的一些问题
  20. div配景图片全div显示

热门文章

  1. [leetcode]118,119PascalsTriangle,杨辉三角1,2
  2. 定期删除文件夹中的文件——C#
  3. Mirai框架qq机器人教程 新版
  4. Lambda获取类属性的名字
  5. Gradle最佳实践
  6. 记一次flask上传文件返回200前端却504的问题
  7. FastApi学习(二)
  8. d3 zoom 抖动问题 事件
  9. Typora笔记上传到播客时图片不显示问题解决(已解决)
  10. LeetCode394 字符串解码