基础贪心问题
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修饰类(最终的类)-太监类:该类不能被继承。(比如:String StringBuilder,....) final修饰方法(最终的方法):不能被重写 final修饰的变量 :值不…...

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

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

数据结构系列-队列的结构和队列的实现
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 队列 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除删除数据操作的特殊线性表,队列具有先进先出FIFO,…...

MySQL——查询数据的处理
一、并列 连接两个数据列的值,并进行输出的格式化处理(显示为一种统一的格式) concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…...
【机器学习300问】59、计算图是如何帮助人们理解反向传播的?
在学习神经网络的时候,势必会学到误差反向传播,它对于神经网络的意义极其重大,它是训练多层前馈神经网络的核心算法,也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播,不妨借助一个工具——计…...

ctfshow web入门 php特性 web108--web115
web108 ereg函数相当于而preg_match()函数 ereg函数的漏洞:00截断。%00截断及遇到%00则默认为字符串的结束 strrev函数就是把字符串倒过来 就是说intval处理倒过来的传参c0x36d(877)?ca%00778 web109 异常处理类 通过异常处理类Excepti…...

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

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…...

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

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

linux常用指令(一)——cat、more、cp
cat命令: 用于查询看文件内容 语法:cat linux路径 参数必填,表示要查看文件的目录的路径,(相对,绝对,特殊路径符都可以使用) more命令: 用于查看文件内容,…...

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验
1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码;HAL_QSPI_MapInit; 这里注意:你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的,如果不是你需要将引脚…...

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. 队列概念 队列是一种只能在一端进行插入数据操作,另一端进行删除数据操作的数据结构,插入数据的叫队尾,删除数据的…...

JVM专题——类文件结构
本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-file-structure.html 🚀 基础(上) → 🚀 基础(中) → 🚀基础(下&am…...

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

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

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

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑
引言 在 iOS 开发中,将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下,我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而,如果你没有 Mac 电脑,也没有关系,本文将介绍一…...

c语言多媒体文件管理及检索系统220
定制魏:QTWZPW,获取更多源码等 目录 选题 程序设计题1:基于数据分析的小区电量扩容推荐程序 程序设计题2:神气的盒子 程序设计题3:多媒体文件管理及检索系统 程序设计题4: 计算24点游戏 程序设计题…...

链表之双向链表的实现
铁汁们大家好,我们上一篇博客学习了单链表,这节课让我们继续往深学习,学习一下双线链表,话不多说,我们开始吧! 目录 1.双向链表 2.顺序表和链表的优缺点 3.双向链表的实现 1.双向链表 1.我们要实现的双线…...

小白学大模型:什么是生成式人工智能?
什么是生成式人工智能? 在过去几年中,机器学习领域取得了迅猛进步,创造了人工智能的一个新的子领域:生成式人工智能。这些程序通过分析大量的数字化材料产生新颖的文本、图像、音乐和软件,我将这些程序简称为“GAIs”…...

并发编程01-深入理解Java并发/线程等待/通知机制
为什么我们要学习并发编程? 最直白的原因,因为面试需要,我们来看看美团和阿里对 Java 岗位的 JD: 从上面两大互联网公司的招聘需求可以看到, 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司, 并…...

3.类与对象(中篇)介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类
1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会…...

Vue实现手机APP页面的切换,如何使用Vue Router进行路由管理呢?
在Vue中,实现手机APP页面的切换,通常会使用Vue Router进行路由管理。Vue Router是Vue.js官方的路由管理器,它和Vue.js深度集成,使构建单页面应用变得易如反掌。 以下是一个简单的步骤说明,展示如何使用Vue Router实现…...

软考--软件设计师(软件工程总结2)
目录 1.测试方法 2.软件项目管理 3.软件容错技术 4.软件复杂性度量 5.结构化分析方法(一种面向数据流的开发方法) 6.数据流图 1.测试方法 软件测试:静态测试(被测程序采用人工检测,计算机辅助静态分析的手段&…...

渗透测试之SSRF漏洞
一、SSRF介绍 SSRF(Cross-site Scripting,简称XSS)是一种安全漏洞,它允许攻击者通过构造特定的请求,使服务器发起对外网无法访问的内部系统请求。这种漏洞通常发生在服务端提供了从其他服务器应用获取数据的功能&#…...

【C++】1957. 求三个数的平均数
问题:1957. 求三个数的平均数 类型:基本运算、小数运算 题目描述: 小雅刚刚考完语文、数学、英语的三门期中考试,她想请你编个程序来帮她算算她的平均分。 要求输入三个正整数,分别表示三科考试的分数,输…...