蓝桥杯 破译密码 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;
}
相关推荐
寒页_9 小时前
2025年第十六届蓝桥杯省赛真题解析 Java B组(简单经验分享)
java·数据结构·经验分享·算法·蓝桥杯
汇太浪10 小时前
第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 部分题解
蓝桥杯
邪神与厨二病11 小时前
2025蓝桥杯python A组题解
数据结构·c++·python·算法·蓝桥杯·单调栈·反悔贪心
ExtractStars12 小时前
2025 蓝桥杯省赛c++B组个人题解
c++·蓝桥杯
小徐Chao努力13 小时前
【蓝桥杯】第十六届蓝桥杯 JAVA B组记录
java·蓝桥杯
梭七y13 小时前
【力扣hot100题】(089)最长有效括号
算法·leetcode·职场和发展
柒_汐14 小时前
第十五届蓝桥杯C/C++B组省赛真题讲解(分享去年比赛的一些真实感受)
c语言·c++·蓝桥杯·真题·省赛
lzb75914 小时前
蓝桥杯单片机刷题——ADC测量电位器的电压
单片机·蓝桥杯
nuo53420215 小时前
第十六届蓝桥杯 省赛C/C++ 大学B组
c语言·c++·算法·蓝桥杯·图论
tpoog15 小时前
[MySQL] 表的增删查改(查询是重点)
linux·数据库·mysql·算法·贪心算法