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

基础贪心问题

1.部分背包问题

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 110;
double v[N], w[N];
pair<double, int> a[N];
int n, m;int main(){cin>>n>>m;double x, y;for(int i = 0; i < n; i++){cin>>v[i]>>w[i];a[i] = {w[i] / v[i], i};}sort(a, a + n, greater<pair<double, int>>());double sum = 0, ans = 0;int i = 0;while(sum + v[a[i].second] <= m && i < n){sum += v[a[i].second];ans += w[a[i].second];i++;}if(sum < m && i < n){double x = m - sum;ans += x * a[i].first;}printf("%.2lf", ans);return 0;
}

2.排队接水

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
pair<double, int> a[N];
int n; int main(){cin>>n;double x;for(int i = 0; i < n; i++){cin>>x;a[i] = {x, i};}sort(a, a + n);double sum = 0;int m = n;for(int i = 0; i < n; i++){cout<<a[i].second + 1<<" ";m--;sum += m * a[i].first;}cout<<endl;sum /= n;printf("%.2lf", sum);return 0;
}

3.线段覆盖

按区间右端点升序排序,如果能接上就接
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e6 + 10;
pair<int, int> a[N];
int n; bool cmp(const pair<int, int>& p, const pair<int, int>& q){return p.second < q.second;
}int main(){cin>>n;int x, y;for(int i = 0; i < n; i++){cin>>x>>y;a[i] = {x, y};}sort(a, a + n, cmp);int st, ed = -1e9;int cnt = 0;for(int i = 0; i < n; i++){if(a[i].first >= ed){st = a[i].first;ed = a[i].second;cnt++;}}cout<<cnt;return 0;
}

4.合并果子

用小根堆维护最小值,每次取出两个最小值
在这里插入图片描述

#include<iostream>
#include<queue>
using namespace std;
priority_queue<int, vector<int>, greater<int>> q;
int n; int main(){cin>>n;int x;for(int i = 0; i < n; i++){cin>>x;q.push(x);}int sum = 0, a = 0, b = 0;while(q.size() > 1){a = q.top();q.pop();b = q.top();q.pop();sum += a + b;q.push(a + b);}cout<<sum;return 0;
}

5.小A的糖果

如果两个相邻的多了,那就先减去第二个,因为第二个还关联第三个
在这里插入图片描述

#include<iostream>
#include<queue>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n, m; int main(){cin>>n>>m;for(int i = 0; i < n; i++){cin>>a[i];}long long sum = 0;for(int i = 0; i < n - 1; i++){if(a[i] + a[i + 1] > m){int x = a[i] + a[i + 1] - m;if(a[i + 1] >= x) a[i + 1] -= x;else{a[i] -= x - a[i + 1];a[i + 1] = 0;}sum += x;}}cout<<sum;return 0;
}

6.删数问题

删掉下坡数
在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n, m; 
string s;int main(){cin>>s;cin>>n;int len = s.size();for(int i = 0; i < len; i++){a[i] = s[i] - '0';}while(n--){for(int i = 0; i < len; i++){if(a[i] > a[i + 1]){for(int j = i; j < len; j++) a[j] = a[j + 1];len--;break;}}}int z = 0, st = 0;while(a[z] == 0 && st < len - 1){z++, st++;}for(int i = st; i < len; i++){cout<<a[i];}return 0;
}

7.陶陶摘苹果(升级版)

按花费力气升序排序,先摘花费力气小的
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
pair<int, int> q[N];
int n, m, a, b;bool cmp(const pair<int, int>& pp, const pair<int, int>& qq){if(pp.second != qq.second) return pp.second < qq.second;else return pp.first < qq.first; 
}int main(){cin>>n>>m;cin>>a>>b;int x, y;for(int i = 1; i <= n; i++){cin>>x>>y;q[i] = {x, y};}sort(q + 1, q + n + 1, cmp);int cnt = 0;for(int i = 1; i <= n; i++){if(m - q[i].second >= 0 && a + b >= q[i].first){cnt++;m -= q[i].second;}}cout<<cnt;return 0;
}

8.铺设道路

大的带着小的填,如果后面一个大于前一个高度,那就多填这个差值,最后加上第一个需要填的高度
在这里插入图片描述

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

9.混合牛奶

按照价格升序排序,先买便宜的
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 2e6 + 10;
pair<int, int> q[N];
int n, m;int main(){cin>>n>>m;int x, y;for(int i = 0; i < m; i++){cin>>x>>y;q[i] = {x, y};}//cout<<"-------------------"<<endl;sort(q, q + m);int ans = 0, sum = 0;for(int i = 0; i < m; i++){if(sum + q[i].second <= n){ans += q[i].first * q[i].second;sum += q[i].second;//cout<<ans<<endl;}else if(sum < n){ans += (n - sum) * q[i].first;sum = n;break;}else if(sum >= n){break;}//cout<<q[i].first<<" "<<sum<<endl;}cout<<ans;return 0;
}

10.纪念品分组

让大的和小的组合
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 3e4 + 10;
int a[N];
int n, m;int main(){cin>>m>>n;for(int i = 0; i < n; i++) cin>>a[i];sort(a, a + n, greater<int>());int cnt = 0;for(int i = 0, j = n - 1; i <= j; i++){if(a[i] + a[j] <= m){j--;}cnt++;}cout<<cnt;return 0;
}

11.跳跳!

高低高低,反复跳
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 3e4 + 10;
long long a[N];
int n, m;int main(){cin>>n;for(int i = 0; i < n; i++) cin>>a[i];sort(a, a + n, greater<int>());long long sum = 0, ed = 0;for(int i = 0, j = n - 1; i <= j; i++, j--){sum += (a[i] - ed) * (a[i] - ed);sum += (a[j] - a[i]) * (a[j] - a[i]);ed = a[j]; }cout<<sum;return 0;
}

12.分组(难)

二分查找当前满足条件的最后一个小组,如果可以进这个小组,那就进去,否则就新建一个小组
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N], q[N], siz[N];
int n, m;int main(){cin>>n;for(int i = 0; i < n; i++) cin>>a[i];sort(a, a + n);q[0] = 1e9;int cnt = 0, res = 0;for(int i = 0; i < n; i++){int l = 0, r = cnt + 1;while(l + 1 < r){int mid = (l + r) / 2;if(a[i] < q[mid]) r = mid;else l = mid;}if(a[i] == q[l]){q[l]++, siz[l]++;}else{q[++cnt] = a[i] + 1, siz[cnt] = 1;}}int ans = 1e9;for(int i = 1; i <= cnt; i++){ans = min(ans, siz[i]);}cout<<ans;return 0;
}

13.国王游戏(难)

按照左手和右手乘积升序排序,所得的奖赏之和最少
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e3 + 10;
pair<int, int> q[N];
int n, m;bool cmp(const pair<int, int>& pp, const pair<int, int>& qq){if(pp.first * pp.second != qq.first * qq.second) return pp.first * pp.second < qq.first * qq.second;else if(pp.first != qq.first) return pp.first < qq.first;else return pp.second > qq.second;
}int main(){cin>>n;int a, b;for(int i = 0; i <= n; i++){cin>>a>>b;q[i] = {a, b};}sort(q + 1, q + n + 1, cmp);long long ans = 0, sum = 0, res = 1;for(int i = 1; i <= n; i++){cout<<q[i].first<<" "<<q[i].second<<endl;res *= q[i - 1].first;sum = res / q[i].second;ans = max(ans, sum);}cout<<ans;return 0;
}

相关文章:

基础贪心问题

1.部分背包问题 #include<iostream> #include<algorithm> using namespace std; const int N 110; double v[N], w[N]; pair<double, int> a[N]; int n, m;int main(){cin>>n>>m;double x, y;for(int i 0; i < n; i){cin>>v[i]>&g…...

day13 java final 类和对象的初始化执行顺序

final [面试题]请简述final关键字final修饰类&#xff08;最终的类&#xff09;-太监类&#xff1a;该类不能被继承。(比如&#xff1a;String StringBuilder,....) final修饰方法&#xff08;最终的方法&#xff09;&#xff1a;不能被重写 final修饰的变量 &#xff1a;值不…...

蓝桥杯gcd汇总

gcd3014 问题描述 小明和小红是一对恋人&#xff0c;他们相爱已经三年了&#xff0c;在今年的七夕节&#xff0c;小明准备给小红一个特殊的礼物。他想要送给小红一些数字&#xff0c;让小红算出有多少对正整数 (a,b) 满足以下条件&#xff1a; clcm(a,b)−dgcd(a,b)x其中 c,…...

极市平台 | 综述:一文详解50多种多模态图像融合方法

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;综述&#xff1a;一文详解50多种多模态图像融合方法 0 极市导读 本工作总结了50篇论文中Lidar和camera的多模态融合的一些概念方法。笔者结合原文以及自…...

数据结构系列-队列的结构和队列的实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO&#xff0c;…...

MySQL——查询数据的处理

一、并列 连接两个数据列的值&#xff0c;并进行输出的格式化处理&#xff08;显示为一种统一的格式&#xff09; concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…...

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

在学习神经网络的时候&#xff0c;势必会学到误差反向传播&#xff0c;它对于神经网络的意义极其重大&#xff0c;它是训练多层前馈神经网络的核心算法&#xff0c;也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播&#xff0c;不妨借助一个工具——计…...

ctfshow web入门 php特性 web108--web115

web108 ereg函数相当于而preg_match()函数 ereg函数的漏洞&#xff1a;00截断。%00截断及遇到%00则默认为字符串的结束 strrev函数就是把字符串倒过来 就是说intval处理倒过来的传参c0x36d&#xff08;877&#xff09;?ca%00778 web109 异常处理类 通过异常处理类Excepti…...

京东API接口采集商品详情数据(测试入口如下)

京东API接口采集商品详情数据 请求示例&#xff0c;API接口接入Anzexi58 在当今数字化时代&#xff0c;电商平台的API接口成为了获取商品详情数据的重要途径之一。作为中国最大的自营式电商企业&#xff0c;京东提供了丰富的API接口供开发者使用&#xff0c;以便获取京东平台上…...

Mac brew 安装软件

Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

【顶部距离计算】计算元素顶部与浏览器顶部的距离

在开发中&#xff0c;我们常常需要计算某个元素顶部与浏览器视口顶部的距离&#xff0c;只需要一个方法即可计算 解决&#xff1a;使用getBoundingClientRect()方法 代码示例&#xff1a; 接收一个参数element表示需要计算的元素 // 计算该元素的顶部距离浏览器的顶部距离 c…...

守护人类健康:人工智能赋能医疗领域创新应用

编者按&#xff1a;每年的4月7日是世界卫生日&#xff0c;又称世界健康日&#xff0c;旨在引起世界各国人民对卫生、健康工作的关注&#xff0c;提高人们对卫生领域的素质和认识&#xff0c;强调健康对于劳动创造和幸福生活的重要性。那么&#xff0c;如果医疗技术能够更加智能…...

linux常用指令(一)——cat、more、cp

cat命令&#xff1a; 用于查询看文件内容 语法&#xff1a;cat linux路径 参数必填&#xff0c;表示要查看文件的目录的路径&#xff0c;&#xff08;相对&#xff0c;绝对&#xff0c;特殊路径符都可以使用&#xff09; more命令&#xff1a; 用于查看文件内容&#xff0c…...

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…...

Mac反编译APK

文章目录 第一种方式: brew installapktool 使用说明dex2jar 使用说明 第二种方式: 下载安装包apktool 使用说明 (根据官方介绍没有操作成功,后续成功再更新这里)dex2jar 使用说明 安装 JD-GUI 查看jar包中的class文件JD-GUI 使用说明 第一种方式: brew install 安装过程可能很…...

Java数据结构-队列

目录 1. 队列概念2. 模拟实现队列2.1 链式队列2.2 循环队列 3. 双端队列4. 队列的应用4.1 用队列实现栈4.2 用栈实现队列 1. 队列概念 队列是一种只能在一端进行插入数据操作&#xff0c;另一端进行删除数据操作的数据结构&#xff0c;插入数据的叫队尾&#xff0c;删除数据的…...

JVM专题——类文件结构

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-file-structure.html &#x1f680; 基础&#xff08;上&#xff09; → &#x1f680; 基础&#xff08;中&#xff09; → &#x1f680;基础&#xff08;下&am…...

零基础10 天入门 Web3之第2天

10 天入门 Web3之第2天Web3 是互联网的下一代&#xff0c;它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划&#xff0c;可帮助大家入门 Web3&#xff1a; 一、这是第二…...

Vue和FastAPI实现前后端分离

前言 近期接触了一些开源大模型应用服务&#xff0c;发现很多用的都是FastAPI web框架&#xff0c;于是乎研究了一下它的优势&#xff0c;印象最深有两个&#xff1a;一个是它的异步处理性能比较好&#xff0c;二是它可以类似java swagger的API交互文档&#xff0c;这个对应前…...

34470A是德科技34470A数字万用表

181/2461/8938产品概述&#xff1a; Truevolt数字万用表&#xff08;34460A、34461A、34465A、34470A&#xff09;利用是德科技的新专利技术&#xff0c;使您能够快速获得见解、测量低功耗设备并保持校准的测量结果。Truevolt提供全方位的测量能力&#xff0c;具有更高的精度、…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...

Ubuntu 安装 Mysql 数据库

首先更新apt-get工具&#xff0c;执行命令如下&#xff1a; apt-get upgrade安装Mysql&#xff0c;执行如下命令&#xff1a; apt-get install mysql-server 开启Mysql 服务&#xff0c;执行命令如下&#xff1a; service mysql start并确认是否成功开启mysql,执行命令如下&am…...