蓝桥杯 破译密码 Johnson流水线贪心算法

蓝桥账户中心

输入样例

复制代码
4
1 3 5 7
6 5 1 4

输出样例

复制代码
17

说明

两人可以按照 (1,2,4,3) 的芯片编号顺序进行破译传输,所需时间为 17。

思路

优先选择能更快释放传输资源或减少后续等待的任务

关键,如何对整个队列进行排序

例如比较X,Y,谁该放前面

x.first代表破译x芯片需要的时间,x.second代表传输x芯片需要的时间

解密快但传输慢的芯片,解密慢但传输快的芯片

找到能尽快传输的

A解密时,B(如果已经解密)可以进行传输

也就是A,B的最小值,代表AB同时占用时间线的时间

AB同时占用时间线的时间的值越大,证明任务并行程度越高,资源利用率越高

所以比较每组的AB同时用时,采取同时用时最长的方法

总结

比较A(解密)B(传输)和B(解密)A(传输)的重叠时间,非重叠时间小的那个解密任务,往前放

这样能更快运行下一个解密任务

注意

Johnson流水线算法,无法保证排序的稳定性,有可能会有A要排B前面,B要排

Johnson流水线算法,可以保证排序的稳定性

情况一

如果A的解密时间,和传输时间,都低于B的传输时间,和解密时间

那优先解决A

情况二:A(5,2),B(1,3)

如果A的解密时间,大于B的传输时间,而A的传输时间,大于B的解密时间

此时大小,一定由B的传输时间和B的解密时间控制

如果B的传输时间大于B的解密时间

则先解密B,解密B后,在传输B的同时,解密A,最后传输A

此时传输B,解密A大于传输A,解密B

深度理解

看完样例情况,深度理解

min(解密A,传输B)的解,实际上是AB重复叠加,并行操作的最大值

min(解密A,传输B)和min(解密B,传输A)比较,实际上比较的是谁能并行处理的时间更长

min(解密A,传输B)代表的方案实际上是:首先解密B,然后传输B的同时解密A,然后传输A 方案1

min(解密B,传输A)代表的方案实际上是:首先解密A,然后传输A的同时解密B,然后传输B 方案2

传输B的同时解密A,他们的并行处理的时间是min(解密A,传输B),此为先B后A方案 方案1

传输A的同时解密B,他们的并行处理的时间是min(解密B,传输A),此为先A后B方案 方案2

初始状态A在B前面,初始为方案2

比较哪个方案的并行处理时间更长,选择更长的方案。

例如:min(解密A,传输B)<min(解密B,传输A),则采用传输A的同时解密B,也就是方案2,先A后B

例如:min(解密A,传输B)>min(解密B,传输A),则采用传输B的同时解密A,也就是方案1,先B后A

min里的是中间态,为并行操作最长时间

cpp 复制代码
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
pair<int,int> p[N];
int res,t;
int pd(pair<int,int> x,pair<int,int> y){
    return min(x.first,y.second)<min(y.first,x.second);
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>p[i].first;
    for(int i=1;i<=n;i++)cin>>p[i].second;
    sort(p+1,p+1+n,pd);
    for(int i=1;i<=n;i++){
        res+=p[i].first;
        if(res>=t)t=res+p[i].second;
        else t=t+p[i].second;
    }
    cout<<t;
    return 0;
}
相关推荐
一只机电自动化菜鸟4 小时前
一建机电备考笔记(17) 常用设备—通用设备1(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
CoderYanger5 小时前
14届蓝桥杯省赛Java A 组Q1~Q3
java·开发语言·线性代数·算法·职场和发展·蓝桥杯
项管芝士7 小时前
PMP认证备考全攻略:费用、周期与机构选择常见问题解答
职场和发展·职场发展
小徐不徐说9 小时前
面试C++易错点总结
开发语言·c++·面试·职场和发展·程序设计·工作
YummyJacky10 小时前
阿里ai应用开发面试
面试·职场和发展
y = xⁿ10 小时前
20天速通LeetCode day08:关于栈
算法·leetcode·职场和发展
WYiQIU11 小时前
宇树科技Web前端岗(AI方向),这不算泄题吧......
前端·vue.js·人工智能·笔记·科技·面试·职场和发展
HY小宝F12 小时前
破局研发管理“双面角色”:从小团队救火走向系统化治理
职场和发展
云泽80812 小时前
第十五届蓝桥杯大赛软件赛省赛C/C++大学B组
c语言·c++·算法·蓝桥杯
fysuccess14 小时前
Ubuntu 22.04 零基础安装 Hermes 完整入门指南
linux·ubuntu·蓝桥杯