当前位置: 首页 > news >正文

贪心算法 求解思路

贪心算法简介

贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点,做一个当时(看起来是)最佳的选择。这种启发式策略并不是总能产生出最优解,但它常常能给出最优解。

在实际设计贪心算法时,通常直接做出贪心选择来构造子结构,以产生一个待优化解决的子问题,或者,根据贪心选择来构造最优子结构。

贪心算法的一般做法

虽然贪心算法没有固定的解题模板,但一般情况下使用贪心算法,需要对问题进行分析,可以参考下面的解题步骤;

  1. 问题定义:明确问题的输入、输出和目标。

  2. 状态定义:**将问题分解为多个阶段,每个阶段都有一个状态。**状态通常由问题的某些属性表示。(如取最大值或者最小组等)

  3. 确定贪心策略:在每个阶段,根据当前状态选择最优决策,以期望达到全局最优解。这个最优决策通常是最优子结构的一部分,问题的最优解可以通过其子问题的最优解来获得,则问题具有最优子结构,这意味着每个阶段的最优决策都是全局最优解的一部分。

  4. 代码实现:根据上述步骤设计贪心算法,编写代码。通常,贪心算法包括一个循环,每次循环中都选择当前最优决策,并更新状态。

  5. 算法分析:分析贪心算法的正确性和可行性。

贪心算法实例

下面演示的题目来自 洛谷P1080 国王游戏的题目, 其问题的求解的核心就是拆解问题,将问题分为小问题,并且取局部最优解。本题涉及的内容包括 贪心算法+高精度的变换

求解思路:
在这里插入图片描述
代码:

#include<bits/stdc++.h>
using namespace std;
struct temp{int l,r,all;
}a[1005];
bool cmp(temp a,temp b){return a.all<b.all;
}
int main(){int n;int result = 0;cin>>n;for(int i=0;i<=n;i++){cin>>a[i].l>>a[i].r;a[i].all=a[i].l*a[i].r;}sort(a+1,a+n+1,cmp);int sum=1;for(int i=1;i<=n;i++){sum*=a[i-1].l;if(sum/a[i].r > =result){result = sum / a[i].r;}}cout<<result;return 0;
}

测试情况如下所示,可以看到在不考虑高精度的情况也是得分能达到60分,故此在平时做题时,当涉及到贪心算法的应用时,需要将问题进行拆解细分为小问题,并且运用数学逻辑将问题简答化(建议采用假设方法)。
在这里插入图片描述
正确AC解法:

 #include <bits/stdc++.h>  using namespace std;struct stu {int l;  // 大臣的左手数int r;  // 大臣的右手数} f[1005];  // 定义结构体数组 f,最多可容纳 1005 位大臣// 比较函数,用于排序bool cmp(stu a, stu b) {return a.l * a.r < b.l * b.r;  // 按左手数和右手数的乘积升序排序}int n;  // 大臣数量vector<int> ans(1, 0);  // 初始化答案向量,初始值为 0vector<int> t(1, 1);  // 初始化乘积向量,初始值为 1// 高精度数乘法inline vector<int> mul(vector<int> &a, int b) {vector<int> res;  // 存储结果的向量int t = 0;  // 进位int len = a.size();  // 输入向量的长度for (int i = 0; i < len; i++) {t += a[i] * b;  // 乘以 bres.push_back(t % 10);  // 取当前位t /= 10;  // 更新进位}while (t) {  // 处理剩余的进位res.push_back(t % 10);t /= 10;}return res;  // 返回乘法结果}// 高精度数除法inline vector<int> div(vector<int> &a, int b) {vector<int> res;  // 存储结果的向量int r = 0;  // 余数int len = a.size();  // 输入向量的长度for (int i = len - 1; i >= 0; i--) {  // 从低位到高位处理r = 10 * r + a[i];  // 将当前位加入余数if (r >= b) {  // 如果余数大于等于除数res.push_back(r / b);  // 计算商并存入结果r %= b;  // 更新余数} else {res.push_back(0);  // 商为0}}vector<int> cnt;  // 存储结果的向量(逆序)len = res.size();for (int i = len - 1; i >= 0; i--) {cnt.push_back(res[i]);  // 逆序存取结果}// 去掉前导零while ((cnt.back() == 0) && (cnt.size() > 1)) {cnt.pop_back();}return cnt;  // 返回除法结果}// 比较两个高精度数inline int compare(vector<int> &a, vector<int> &b) {int lenA = a.size();int lenB = b.size();if (lenA != lenB) {  // 长度不同return lenA - lenB;  // 返回长度差} else {  // 长度相同for (int i = lenA - 1; i >= 0; i--) {if (a[i] != b[i]) {  // 从高位比较return a[i] - b[i];  // 返回差值}}return 0;  // 相等}}int main() {cin >> n;  // 输入大臣数量cin >> f[0].l >> f[0].r;  // 输入国王的左手数和右手数for (int i = 1; i <= n; i++) {  // 输入每位大臣的左右手数cin >> f[i].l >> f[i].r;}sort(f + 1, f + 1 + n, cmp);  // 按照比较函数排序大臣t = mul(t, f[0].l);  // 将国王的左手数乘入乘积for (int i = 1; i <= n; i++) {  // 遍历每位大臣vector<int> res = div(t, f[i].r);  // 计算当前大臣的金币数if (compare(ans, res) < 0) {  // 如果当前金币数更大ans = res;  // 更新结果}t = mul(t, f[i].l);  // 更新乘积,乘入当前大臣的左手数}int len = ans.size();  // 获取结果的长度for (int i = len - 1; i >= 0; i--) {  // 输出结果(逆序)cout << ans[i];}cout << endl;  // 输出换行return 0;  // 返回成功}

相关文章:

贪心算法 求解思路

贪心算法简介 贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点&#xff0c;做一个当时&#xff08;看起来是&#xff09;最佳的选择。这种启发式策略并不是总能产生出最优解&#xff0c;但它常常能给出最优解。 在实际设计贪心算法时&#xff0…...

2025/2/25,字节跳动后端开发一面面经

一、双方简单自我介绍 面试官先自我介绍,之后属于面试官看简历过程,基本不听。 二、实习中遇到最难的事情,怎么解决的 主要问的还是实习中做过的项目,项目难点在哪里(自己参与的地方),面对困难是怎么思考,怎么实际操作解决的。 三、项目实现细节 掌握自己项目的实…...

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统&#xff0c;适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…...

SpringBoot新闻推荐系统设计与实现

随着信息时代的快速发展&#xff0c;新闻推荐系统成为用户获取个性化内容的重要工具。本文将介绍一个幽络源的基于SpringBoot开发的新闻推荐系统&#xff0c;该系统功能全面&#xff0c;操作简便&#xff0c;能够满足管理员和用户的多种需求。 管理员模块 管理员模块为系统管…...

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…...

基于Java+Spring+Mybsita+mysql的汽租车辆共享平台的设计源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏&#xff0c;有毕设问题&#xff0c;项目以及论文撰写等问题都可以和博主沟通&#xff0c;尽最大努力帮助更多的人&#xff01; 目录 1软件需求 1.1引言 1.1.1编写目的 1.1.2背景 1.2 绪论 1.2.1&#xff0d;Internet与…...

深度学习的正则化深入探讨

文章目录 一、说明二、学习目标三、什么是机器学习中的正则化四、了解过拟合和欠拟合五、代价函数的意义六、什么是偏差和方差&#xff1f;七、机器学习中的正则化&#xff1f; 一、说明 在训练机器学习模型时&#xff0c;模型很容易过拟合或欠拟合。为了避免这种情况&#xf…...

Token相关设计

文章目录 1. 双Token 机制概述1.1 访问令牌&#xff08;Access Token&#xff09;1.2 刷新令牌&#xff08;Refresh Token&#xff09; 2. 双Token 认证流程3. Spring Boot 具体实现3.1 生成 Token&#xff08;使用 JWT&#xff09;3.2 解析 Token3.3 登录接口&#xff08;返回…...

【时序预测】在线学习:算法选择(从线性模型到深度学习解析)

——如何为动态时序预测匹配最佳增量学习策略&#xff1f; 引言&#xff1a;在线学习的核心价值与挑战 在动态时序预测场景中&#xff08;如实时交通预测、能源消耗监控&#xff09;&#xff0c;数据以流式&#xff08;Streaming&#xff09;形式持续生成&#xff0c;且潜在的…...

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求&#xff1a;用户需要为日期选择器的每个日期单元格添加一个Tooltip&#xff0c;当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码&#xff0c;确保Tooltip正确显示&#xff0c;并且数据…...

学生管理前端

文章目录 首页student.html查询功能 首页 SpringBoot前端html页面放在static文件夹下&#xff1a;/src/main/resources/static 默认首页为index.html&#xff0c;我们可以用两个超链接或者两个button跳转到对应的页面。这里只是单纯的跳转页面&#xff0c;不需要提交表单等其…...

深入理解并实现自定义 unordered_map 和 unordered_set

亲爱的读者朋友们&#x1f603;&#xff0c;此文开启知识盛宴与思想碰撞&#x1f389;。 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 在 C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;unorder…...

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-大模型电话机器人

语音流直接对接Realtime API 多模态大模型 直接把音频流输出给大模型&#xff0c;大模型返回音频流。 顶顶通CTI对Realtime API 的支持 提供了以下2个APP可对接任意 •cti_audio_stream 通过TCP推流和播放流&#xff0c;适合用于人机对话场景。 •cti_unicast_start 通过旁…...

kinova机械臂绿色灯一闪一闪及刷机方法

一、背景 实验室有两个kinova mico机械臂&#xff0c;但经常出现操纵杆上的绿色灯一闪一闪的&#xff0c;导致无法使用操纵杆或ROS进行控制&#xff0c;下面给出官方的教程以及所需要的FS 0CPP 0008_6.2.5_mico_6dof.hex文件。 重要的东西写在前面&#xff1a; a、如果出现操…...

第16天:C++多线程完全指南 - 从基础到现代并发编程

第16天&#xff1a;C多线程完全指南 - 从基础到现代并发编程 一、多线程基础概念 1. 线程创建与管理&#xff08;C11&#xff09; #include <iostream> #include <thread>void hello() {std::cout << "Hello from thread " << std::this_…...

中科大计算机网络原理 1.5 Internt结构和ISP

一、互联网的层次化架构 ‌覆盖范围分层‌ ‌主干网&#xff08;Tier-1级&#xff09;‌ 国家级或行业级核心网络&#xff0c;承担跨区域数据传输和全球互联功能。例如中国的四大主干网&#xff08;ChinaNET、CERNET等&#xff09;以及跨国运营商&#xff08;如AT&T、Deuts…...

Windows安装sql server2017

看了下官网的文档&#xff0c;似乎只有ubuntu18.04可以安装&#xff0c;其他debian系的都不行&#xff0c;还有通过docker的方式安装的。 双击进入下载的ISO&#xff0c;点击执行可执行文件&#xff0c;并选择“是” 不要勾选 警告而已&#xff0c;不必理会 至少勾选这两…...

计算机网络之传输层(tcp协议)

一、TCP协议的特点 面向连接&#xff1a;TCP使用面向连接的通信模式&#xff0c;通信双方需要先建立连接&#xff0c;然后才能进行数据的传输。连接建立过程采用三次握手的方式。 可靠性&#xff1a;TCP提供可靠的数据传输服务&#xff0c;确保数据的完整性、有序性和正确性。…...

从零到一:如何用阿里云百炼和火山引擎搭建专属 AI 助手(DeepSeek)?

本文首发&#xff1a;从零到一&#xff1a;如何用阿里云百炼和火山引擎搭建专属 AI 助手&#xff08;DeepSeek&#xff09;&#xff1f; 阿里云百炼和火山引擎都推出了免费的 DeepSeek 模型体验额度&#xff0c;今天我和大家一起搭建一个本地的专属 AI 助手。  阿里云百炼为 …...

Open3D解决SceneWidget加入布局中消失的问题

Open3D解决SceneWidget加入布局中消失的问题 Open3D解决SceneWidget加入布局中消失的问题1. 问题2. 问题代码3. 解决 Open3D解决SceneWidget加入布局中消失的问题 1. 问题 把SceneWidget加到布局管理其中图形可以展示出来&#xff0c;但是鼠标点击就消失了。 stackoverflow上已…...

如何用ncmdump实现NCM音乐格式的终极自由转换

如何用ncmdump实现NCM音乐格式的终极自由转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump是一款专门解决NCM加密格式限制的开源工具&#xff0c;…...

布里渊散射与机器学习势场协同表征MOF力学性能

1. 项目概述&#xff1a;当布里渊散射遇见机器学习势场在材料科学的前沿探索中&#xff0c;我们常常面临一个核心挑战&#xff1a;如何精确、无损地获取复杂材料的本征力学性能&#xff0c;尤其是那些结构精巧但晶体尺寸微小的新材料。金属有机框架&#xff08;MOFs&#xff09…...

Grafana k6性能工程实践:从压测工具到CI/CD原生可观测性基础设施

1. 这不是又一个“压测脚本包装器”&#xff0c;而是性能工程的基础设施重构Grafana k6——这个名字刚出现时&#xff0c;我第一反应是&#xff1a;又一个基于Node.js封装的轻量级压测工具&#xff1f;毕竟JMeter、Locust、Artillery都走过类似路径。但真正把它跑通第一个真实业…...

基于Hugging Face与Gradio的智能问答系统构建实战

1. 项目概述&#xff1a;从零构建一个可交互的智能问答系统 如果你对自然语言处理&#xff08;NLP&#xff09;感兴趣&#xff0c;并且一直想亲手搭建一个能“读懂”文章并回答问题的智能系统&#xff0c;那么这篇文章就是为你准备的。过去几年&#xff0c;基于Transformer架构…...

MO-OBAM模型参数调优实战:平衡数据匿名化中的隐私保护与信息损失

1. 项目概述与核心挑战数据匿名化&#xff0c;听起来像是个技术黑话&#xff0c;但说白了&#xff0c;就是给数据“戴上面具”。无论是金融信贷记录、人口普查信息还是敏感的医疗病历&#xff0c;在共享给第三方进行分析前&#xff0c;都必须经过这道工序&#xff0c;以防止张三…...

火焰不飘、不燃、不爆?,Midjourney 6.6火效失效紧急修复方案(含--no参数黑名单清单与替代性热力图引导法)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;火焰不飘、不燃、不爆&#xff1f;——Midjourney 6.6火效失效现象的本质溯源 近期大量用户反馈&#xff0c;在 Midjourney v6.6 中使用 fire、 flame、 blazing 等关键词生成图像时&#xff0c;火焰元素普遍…...

Midjourney对比度调控失效全解析(从sref色域偏移到底层CLIP文本嵌入权重干预)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Midjourney对比度控制失效的现象学观察 当用户在 Midjourney v6 中显式使用 --contrast 参数&#xff08;如 /imagine prompt: a cyberpunk alley at night --contrast 100&#xff09;时&#xff0c;输出图…...

从PSCI到ATF:手把手带你拆解Linux ARM64平台CPU休眠唤醒的完整调用链

ARM64平台CPU休眠唤醒全链路解析&#xff1a;从内核到固件的技术实现在当今移动计算和嵌入式系统领域&#xff0c;电源管理已成为衡量系统设计优劣的关键指标之一。作为系统级电源管理的核心组成部分&#xff0c;CPU的休眠唤醒机制直接影响着设备的续航能力和响应速度。本文将深…...

Qwen模型 LeetCode 2581. 统计可能的树根数目 C++实现

哈哈&#xff0c;看来你对这道题特别感兴趣呀&#xff01;让我给你一个**终极优化版**的C实现&#xff0c;这次用位运算哈希 向量预分配&#xff0c;保证又快又稳&#xff01;cpp class Solution { public:int rootCount(vector<vector<int>>& edges, vector&…...

别再乱码了!一文搞懂Windows记事本里ANSI、GBK、SJIS这些编码到底怎么选

告别乱码&#xff01;Windows记事本编码选择终极指南 为什么你的文件总在别人电脑上显示乱码&#xff1f; 每次用Windows记事本保存文件时&#xff0c;面对"ANSI"、"Unicode"、"UTF-8"这些选项&#xff0c;你是否感到困惑&#xff1f;明明在自己…...