1 月 27日算法练习-贪心

文章目录

  • 扫地机器人
  • 分糖果
  • 最小战斗力差距
  • 谈判
  • 纪念品分组

扫地机器人

在这里插入图片描述
思路:

  1. 最优机器人清理方法:机器人清理方法先扫左边,有时间再扫右边。
  2. 最短时间:通过枚举,从 1 开始,清理面积会越大直到全部面积的清理时间是最小时间。优化:二分枚举时间,由于随时间增大清理面积增大,单调可以用二分。
#include<iostream>
#include<stdbool.h>
using namespace std;
const int N = 1e5+10;
int a[N];
int n,k;bool check(int mid){int pos=0;for(int i=1;i<=k;i++){int t=mid;t-=(a[i]-pos-1)*2;if(t<0)return false;pos = a[i]+t/2;}if(pos<n)return false;return true;
}
int main( ){cin>>n>>k;for(int i=1;i<=k;i++)cin>>a[k];sort(a+1,a+1+k);int l=1,r=2*n,ans=2*n;while(l<=r){int mid=l+r>>1;if(check(mid))ans=mid,r=mid-1;else l=mid+1;}cout<<ans<<'\n';return 0;
}

分糖果

在这里插入图片描述
思路:贪心中的规律题。先理解题意+找出规律。先排序,能保证最大的最小,然后分成三种情况,第一种全部字符相等,就平分,多余的放到最后一个。第二种,如果第 x 个和第一个相等就直接输出 x 到最后。第三种如果不相等,把 x 后面放到第一个,直接输出 x。x 肯定比第一个字符串大,并且 x 最小。

找规律的贪心,考验思维,将字符串分类讨论,设计贪心策略。
先给字符串排序,然后我们可以分为三类讨论:
1)字符串全相等(假设全a),那就是尽量使得每个人分到的字符串的最大长度尽可能小就行。
2)s[x]==s[1],说明第x个是最小的字符带着后面所有的字符一起输出。
3)s[x]!=s[1],后面一坨字符可以直接丢到s[1]后面,分给第一个同学。

#include<iostream>
using namespace std;
const int N =1e6+10;
char s[N];
int main( ){int n,x;cin>>n>>x;for(int i=1;i<=n;i++)cin>>s[i];sort(s+1,s+1+n);if(s[1]==s[n]){for(int i=1;i<=n/x+(n%x?1:0);i++)cout<<s[i];}else{if(s[1]==s[x])for(int i=x;i<=n;i++)cout<<s[i];else cout<<s[x];}return 0;
}

最小战斗力差距

在这里插入图片描述
思路:贪心,所有方案中排序后划分分为 a,b 两个组会比不排序划分的战斗力更小。所以选择排序后将 a,b 划分,其中枚举所有结果选择最小的。
要将战斗力分为两部分,为了使得差距最小,我们可以将战斗力排序后,找一个位置进行划分,使得左边的都在a,右边的都在b,从而这个差距就是这个位置两边的战斗力差距,说明差距的取值仅有n-1种,枚举即可。
这个题启发我们,当混乱的数据不好处理,且排序不影响答案时,尝试先排序再分析。

#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
int main( ){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);int ans=a[2]-a[1];for(int i=2;i<=n;i++)ans=min(ans,a[i]-a[i-1]);cout<<ans<<'\n';return 0;
}

谈判

在这里插入图片描述
思路:一共要进行 n-1 步,只要保证每次合并最小的两个部落就能保证总代价最小。
总操作数一定情况下的最小代价模型。我们知道这里一共需要进行的操作次数一定是n-1次,那么贪心地想,如果每次选择代价最小的两个部落合并,不仅可以使得当前代价最小,还可以使得后续合并的代价也尽可能小。
部落大小通过优先队列来维护。

#include<iostream>
#include<queue>
using namespace std;
using ll = long long;
priority_queue<ll,vector<ll>,greater<ll>> pq;
int main( ){int n;cin>>n;for(int i = 0;i<n;i++){ll x;cin>>x;pq.push(x);}ll ans=0;while(pq.size()>1){ll x=pq.top();pq.pop();ll y=pq.top();pq.pop();ans+=x+y;pq.push(x+y);}cout<<ans<<'\n';return 1;
}

纪念品分组

在这里插入图片描述
思路:要使分组尽可能少就尽可能进行两人分组,两人分组中一个多带一个小的会比两小+两多这种方案分组少,所以用一个多带一个小。因为两个多可能超出范围,然后就单独分组多分出组数。
最少数目的贪心模型。
为了使得组数最小,我们应该使得每一组内尽可能装两件礼物(最多只能装两件),尽量占满一组的容量。所以贪心策略是,每一个贵的礼物,带一个便宜的,因为带也是一组,不带也是一组,肯定选择带,且最贵的和最便宜的最容易占满一组。

#include<iostream>
using namespace std;
const int N = 1e5;
int a[N];
int main(){int w,n;cin>>w>>n;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);int l=1,r=n,ans=0;while(l<=r){ans++;if(l==r){break;}if(a[l]+a[r]<=w){l++,r--;}else r--;}cout<<ans<<'\n';return 0;
}

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

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

相关文章

【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

计算机网络——IP协议

前言 网络层的主要负责地址分配和路由选择,ip负责在网络中进行数据包的路由和传输。 IPv4报文组成&#xff08;了解&#xff09; IPv4首部&#xff1a;IPv4首部包含了用于路由和传输数据的控制信息&#xff0c;其长度为20个字节&#xff08;固定长度&#xff09;。 版本&#…

单片机14-17

目录 LCD1602 LCD1602液晶显示屏 直流电机驱动&#xff08;PWM&#xff09; LED呼吸灯 直流电机调速 AD/DA&#xff08;SPI通信&#xff09; AD模数转换 DA数模转换 红外遥控&#xff08;外部中断&#xff09; 红外遥控 红外遥控电机调速 LCD1602 LCD1602液晶显示屏 …

Web 开发 6:Redis 缓存(Flask项目使用Redis并同时部署到Docker详细流程 附项目源码)

大家好&#xff01;欢迎来到第六篇 Web 开发教程&#xff0c;今天我们将探讨一个非常重要的话题&#xff1a;Redis 缓存。作为一个互联网开发者&#xff0c;你一定知道在处理大量请求时&#xff0c;性能优化是至关重要的。而 Redis 缓存正是帮助我们提升系统性能的利器。Redis …

四川古力未来科技公司抖音小店选品攻略从零到一

随着抖音的日益火爆&#xff0c;抖音小店也应运而生&#xff0c;成为了电商行业的新宠儿。但对于许多新手商家来说&#xff0c;如何从众多的商品中挑选出适合自己店铺的商品&#xff0c;却是一件非常头疼的事情。本文将为你揭秘抖音小店的选品攻略&#xff0c;让你轻松玩转电商…

A股风格因子看板 (2024.01 第10期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴 露等。 今日为该因子跟踪第10期&#xff0c;指数组合数据截止日2023-12-31&#xff0c;要点如下 近1年A股风格因子检验…

网络安全面试你应该准备什么?

年底&#xff0c;刚过了校招和跳槽的密集阶段&#xff0c;有的同学拿到了心仪的Offer&#xff0c;有的同学却铩羽而归。星球里也有小伙伴提出了这样的问题&#xff1a;安全相关的工作&#xff0c;有没有什么面试技巧呢&#xff1f; 由于安全门类巨大&#xff0c;涉及的技术很多…

Python进阶(1) | 使用VScode写单元测试

Python进阶(1) | 单元测试 2024.01.28 VSCode: 1.85.1 Linux(ubuntu 22.04) 文章目录 Python进阶(1) | 单元测试1. 目的2. Python Profile3. 单元测试框架3.1 什么是单元测试3.2 选一个单元测试框架3.3 编写 Python 单元测试代码3.4 在 VSCode 里发现单元测试3.5 再写一个单元…

【MySQL】补充和navicat的一些简单使用

文章目录 前言在这里插入图片描述 事情起因因为这个articlecount的c是小写了&#xff0c;我想改成大写 一、修改二、navicat的使用步骤1.连接2.建库&#xff0c;建表 三.填写数据总结 前言 事情起因因为这个articlecount的c是小写了&#xff0c;我想改成大写 提示&#xff1a;…

Redis 学习笔记 2:Java 客户端

Redis 学习笔记 2&#xff1a;Java 客户端 常见的 Redis Java 客户端有三种&#xff1a; Jedis&#xff0c;优点是API 风格与 Redis 命令命名保持一致&#xff0c;容易上手&#xff0c;缺点是连接实例是线程不安全的&#xff0c;多线程场景需要用线程池来管理连接。Redisson&…

一文搞懂设计模式—策略模式

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 使用场景策略模式实现策略模式的优缺点策略模式优化使用Map取消 Context 类策略枚举解决策略类膨胀SpringBoot中的策略模式 总结 在软件开发中&#xff0c;经常会…

pcl应用八叉树实例

pcl应用八叉树实例 文章目录 pcl应用八叉树实例1、基本概念2、基于八叉树的空间划分及搜索操作2.1、关键函数说明2.1.2 OctreePointCloudSearch 类2.1.2 voxelSearch 函数 3、无序点云数据集的空间变化检测 1、基本概念 八叉树结构通过循环递归的划分方法对大小为2 n ∗ 2 n ∗…

C++面试宝典第25题:阶乘末尾零的个数

题目 给定一个整数n,返回n!(n的阶乘)结果尾数中零的个数。 示例 1: 输入:3 输出:0 解释:3! = 6,尾数中没有零。 示例 2: 输入:5 输出:1 解释:5! = 120,尾数中有1个零。 解析 这道题主要考察应聘者对于数学问题的分析和理解能力,以及在多个解决方案中,寻求最优…

elementUI的el-select传递item对象或其他参数的2种方法

方法1 :value“item” 绑定对象 只要:value绑定item对象就可以 value-key"value" 必须是item里的一个属性&#xff0c;绑定值为对象类型时必填 <el-select v-model"value" placeholder"请选择" value-key"value" change"cha…

(蓝桥杯每日一题)求最长回文串

问题描述 给出一个长度为 n 的小写字符串&#xff0c;求一个最长的子串 S&#xff0c;满足SXY,X&#xff0c;Y>1&#xff0c;且X,Y 均为回文串。 输入格式 输入包括一行: 第一行是一个长度为 n 的小写字符串。 输出格式 输出包括一行&#xff1a; 一行一个整数&#xff0c;表…

Material Components for Android助你打造精美App

Material Components for Android助你打造精美App 简介 Material Components for Android (MDC-Android) 是帮助开发者执行 Material Design 的工具。由谷歌的核心工程师和用户体验设计师团队开发&#xff0c;这些组件使得开发者可以可靠地开发工作流来构建美观且功能齐全的 …

期权定价模型系列[9]SABR模型

1.简介 SABR模型是由 Hagan在 2002年提出的一种随机波动率模型&#xff0c;在抛弃了原始的BSM 模型中对于波动率为某一常数的假定&#xff0c;假设隐含波动率同样是符合几何布朗运动的&#xff0c;并且将隐含波动率设定为标的价格和合约行权价的函数&#xff0c;结合了隐含波动…

12.5内存操作流(血干JAVA系列)

12.5内存操作流 12.5内存操作流ByteArraylnputStream类的主要方法ByteArrayOutputStream 类的主要方法【例12.33】使用内存操作流完成一个大写字母转换为小写字母的程序 12.5内存操作流 在 流 的 操 作 中 除 了 进 行 文 件 的 输 入 与 输 出 操 作 之 外 &#xff0c; 也 可…

flask初体验

1、定义 Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。 中文官网 2、初步上手 1、安装flask pip3 install flask 2、创建flask应用 # -*- coding = utf-8 -*- # @Time : 2024/1/28 23:02 # @Author: Frank # @File: main.py…

说说你对vue的mixin的理解,有什么应用场景

mixin是什么 Vue中的mixin 局部混入全局混入注意事项: 使用场景源码分析Vue 的几种类型的合并策略 替换型合并型队列性叠加型小结 此文章&#xff0c;来源于印客学院的资料&#xff0c;这里只是分享&#xff0c;便于查漏补缺。 mixin是什么 Mixin 是 面向对象程序设计语言中…