算法设计与分析复习--贪心(一)

news2024/11/17 4:42:14

文章目录

  • 上一篇
  • 贪心的性质
  • 活动安排问题
  • 贪心背包问题
  • 最优装载
  • 哈夫曼编码
  • 下一篇

上一篇

算法设计与分析复习–动态规划

贪心的性质

在这里插入图片描述
贪心和动态规划都要求问题具有最优子结构;
可用贪心方法时,动态规划可能不适用
可用动态规划方法时,贪心方法可能不适用

活动安排问题

AcWing 908. 最大不相交区间数量

产生最优解的排序是按照结束时间从小到大排序,看不重合区间的数量

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

typedef pair<int, int> PII;//使用pair存储一个时间段
const int N = 100010;

int n;
vector<PII> a;

bool cmp(PII x, PII y)
{
    return x.second < y.second;//结束时间小的排前面
}

int main()
{
    scanf("%d", &n);
    
    for (int i = 0; i < n; i ++)
    {
        int l, r;
        scanf("%d%d", &l, &r);
        a.push_back({l, r});
    }
    
    sort(a.begin(), a.end(), cmp);// 按结束时间进行先后排序
    
    int res = 1, ed = a[0].second;
    for (auto i : a)
    {
        if (i.first > ed){//不重合就加上,更新ed
            res ++;
            ed = i.second;
        }
    }
    printf("%d", res);
    return 0;
}

贪心背包问题

与一般的背包问题不一样,开始给出的是整个物品的重量和价值,但是可以只放这个物品的一部分=>贪心背包
在这里插入图片描述
按单价排序是贪心背包的解决方法

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

typedef pair<double, double> PII;//存在小数情况都要改成double类型
const int N = 1010;

int n, c;
double w[N], v[N];
vector<PII> ob;

bool cmp(PII x, PII y)
{
    return (x.second / x.first) > (y.second / y.first); 
}

int main()
{
    scanf("%d%d", &n, &c);
    
    for (int i = 0; i < n; i ++) scanf("%lf", &w[i]); // 读取为double类型
    for (int i = 0; i < n; i ++) scanf("%lf", &v[i]); // 读取为double类型
    for (int i = 0; i < n; i ++) ob.push_back({w[i], v[i]});
    
    sort(ob.begin(), ob.end(), cmp);
    
    double bv = 0, cw = 0;
    for (auto i : ob)
    {
        cw += i.first;
        if (cw > c){
            bv += (c - (cw - i.first)) * (i.second / i.first); // 把之前加上的i.first要先减掉
            break;
        }
        bv += i.second;
    }
    
    printf("%.2lf", bv); // 输出精度为两位小数
    return 0;
}

在这里插入图片描述

最优装载

在这里插入图片描述
贪心选择策略:重量最轻者优先装载

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;
typedef pair<int, int> PII;

const int N = 100010;

int n, c, x[N], cc;
vector<PII> ob;

int main()
{
    scanf("%d%d", &n, &c);
    for (int i = 0; i < n; i ++)
    {
        int w;
        scanf("%d", &w);
        ob.push_back({w, i});
    }
    
    sort(ob.begin(), ob.end());
    
    int res = 0;
    for (auto i : ob)
    {
        cc += i.first;
        if (cc <= c){
            res ++;
            x[i.second] = 1;
        }
        else{
            x[i.second] = 0;   
        }
    }
    
    printf("%d\n", res);
    for(int i = 0; i < n; i ++) printf("%d ", x[i]);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

哈夫曼编码

在这里插入图片描述
在这里插入图片描述
产生这种前缀码的方式称为哈夫曼树

哈夫曼树相关习题AcWing 148. 合并果子

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

const int N = 10010;

int n;
priority_queue<int, vector<int>, greater<int> > heap;

int main()
{
    scanf("%d", &n);
    
    for (int i = 0; i < n; i ++)
    {
        int x;
        scanf("%d", &x);
        heap.push(x);
    }
    
    int res = 0;
    while (heap.size() > 1)
    {
        int x = 0;
        x += heap.top(); heap.pop();
        x += heap.top(); heap.pop();
        heap.push(x);
        res += x;
    }
    printf("%d", res);
    return 0;
}

在这里插入图片描述

下一篇

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1226875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++关于main函数参数问题

文章目录 前言不带参数的main带参数的main为什么会有带参数的main总结 前言 每次写C/C程序&#xff0c;基本上就是一个int main(){return 0;}。但是后来在linux里面涉及到很多带参数的main函数&#xff0c;我一直不太理解&#xff0c;这里就写篇博客记录一下。 不带参数的main…

10、背景分离 —— 大津算法

上一节学习了通过一些传统计算机视觉算法,比如Canny算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。 今天再看一个视觉中更常见的应用,那就是把图片的前景和背景的分离。 前景和背景 先看看什么是前景什么是背景。 在图像处理和计算机视觉中,"前景"…

SpringCloudAlibaba系列之Nacos服务注册与发现

目录 说明 认识注册中心 Nacos架构图 Nacos服务注册与发现实现原理总览 SpringCloud服务注册规范 服务注册 心跳机制与健康检查 服务发现 主流服务注册中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos作为注册中心的一些实现&#xff0c;很…

AcWing 3. 完全背包问题 学习笔记

有 N&#xfffd; 种物品和一个容量是 V&#xfffd; 的背包&#xff0c;每种物品都有无限件可用。 第 i&#xfffd; 种物品的体积是 vi&#xfffd;&#xfffd;&#xff0c;价值是 wi&#xfffd;&#xfffd;。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不…

Elasticsearch中的语义检索

一、传统检索的背景痛点 和传统的基于关键词的匹配方式不同&#xff0c;语义检索&#xff0c;利用大模型&#xff0c;将文本内容映射到神经网络空间&#xff0c;最终记忆token做检索。 例如想要搜索中国首都&#xff0c;例如数据集中&#xff0c;只有一篇文章在描述北京&#x…

Zabbix实现故障自愈

一、简介 Zabbix agent 可以运行被动检查和主动检查。 在被动检查模式中 agent 应答数据请求。Zabbix server&#xff08;或 proxy&#xff09;询求数据&#xff0c;例如 CPU load&#xff0c;然后 Zabbix agent 返还结果。 主动检查处理过程将相对复杂。Agent 必须首先从 Z…

优卡特脸爱云一脸通智慧管理平台权限绕过漏洞复现(CVE-2023-6099)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大&#xff0c;运行稳定&#xff0c;操作简单方便&#xff0c;用户界面美观&#xff0c;轻松统计数据的一脸通系统。无需安装&#xff0c;只需在后台配置即可在浏览器登录。 功能包括&#xff1a;系统管理中心、人员信息管理…

[qemu逃逸] XNUCA2019-vexx

前言 这题没有去符合, 题目本身不算难. 用户名: root 密码: goodluck 设备逆向 题目没有去符合, 所以其实没啥好讲了, 就列一些笔者认为关键的地方 这里的定义了两块 mmio 内存区. 然后看下设备实例结构体: 可以看到 QEMUTimer, 所以多半就是劫持 dma_timer 了. 漏洞点在…

使用Qt实现多人聊天工作室

目录 1、项目背景 2、技术分析 3、架构设计 3、1 服务器架构 3.1.1 模块划分 3.1.2 模块之间的交互 3、2 客户端架构 3.2.1 模块划分 3.2.2 模块之间交互 4、实现过程 4、1 功能实现 4.1.1 用户登录注册功能​编辑 4.1.2 用户主界面功能 4、2 设计实现 4.2.1 登录…

代码随想录算法训练营|五十六天

回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; dp含义&#xff1a;表示区间内[i,j]是否有回文子串&#xff0c;有true&#xff0c;没有false。 递推公式&#xff1a;当s[i]和s[j]不相等&#xff0c;false&#xff1b;相等时&#xff0c;情况一&#xff0c;…

Springboot框架中使用 Redis + Lua 脚本进行限流功能

Springboot框架中使用 Redis Lua 脚本进行限流功能 限流是一种用于控制系统资源利用率或确保服务质量的策略。在Web应用中&#xff0c;限流通常用于控制接口请求的频率&#xff0c;防止过多的请求导致系统负载过大或者防止恶意攻击。 什么是限流&#xff1f; 限流是一种通过…

Go——一、Go语言安装及介绍

Go 一、Windows下安装Go1、下载Go2、配置环境变量3、下载Jetbrain下的GoLang4、编写hello world5、编译和执行 二、Go语言介绍1、开发文档2、Go语言核心开发团队3、为什么要创建Go4、Go语言发展史5、Go语言特点6、Golang执行过程6.1 执行过程分析6.2 编译是什么 7、开发注意事项…

腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入

Mesh应用的故障注入 故障注入前世今生Envoy设置故障注入-延迟类型设置故障注入-延迟类型并带有自定义状态码总结 故障注入前世今生 故障注入是一种系统测试方法&#xff0c;通过引入故障来找到系统的bug&#xff0c;验证系统的稳健性。istio支持延迟故障注入和异常故障注入。 …

中国制库:创新引领,效率突破,塑造行业新标准

制库是一家专注于企业知识应用的在线SAAS平台,主要构成部分包括制度、表单、流程、制问和集合。作为集合了各种管理制度的平台,制库不仅提供了丰富的制度资源,还通过SAAS版实现了知识集成、修订和应用的全流程。目标是打造中国全面的企业制度库,帮助企业快速建立核心管理系统,并…

Jenkins测完通知到人很麻烦?一个设置配置钉钉消息提醒!

Jenkins 作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。但其实 Jenkins 还可以支持钉钉消息通知&#xff0c;其主要通过 DingTa…

Spark 平障录

Profile Profile 是最重要的第一环。 利用好 spark UI 和 yarn container log分析业务代码&#xff0c;对其计算代价进行预判建设基准&#xff0c;进行对比&#xff0c;比如application id 进行对比&#xff0c;精确到 job DAG 环节 充分利用 UI Stage 页面 页头 summary&…

ON1 Photo RAW MAX 2024 v18.0.4.14758

ON1 Photo RAW MAX 2024 for mac是一款专业的raw照片编辑软件&#xff0c;提供了各种各样的编辑工具&#xff0c;包括调整曝光、对比度、色彩、锐化、裁剪、旋转和去除红眼等功能&#xff0c;用户可以根据具体需求对照片进行精确的调整。ON1 Photo RAW MAX 2024还提供了智能修复…

Windows 的 WSL 中运行 EasyConnect

Windows 的 WSL 中运行 EasyConnect docker-easyconnect 安装 Docker Desktop 通过 Docker 的官网 Docker Desktop 下载并安装. 安装过程一直下一步即可, 默认推荐 WSL 模式 初始化过程需要梯子 安装完后在搜索框搜索 docker-easyconnect hagb/docker-easyconnect 就是需要…

nacos网关

目录 拉取docker镜像 环境配置 网关搭建架构 wemedia-gateway网关配置 依赖 启动类配置 网关yml配置 nacos配置中心配置网关 wdmedia服务配置 依赖 启动类配置 yml配置 nacos配置 nacos中的配置共享 nacos配置 wmedia模块中yml的配置 参考:https://blog.csdn.net/…