【C++贪心】P8769 [蓝桥杯 2021 国 C] 巧克力|普及+

【C++贪心】P8769 [蓝桥杯 2021 国 C] 巧克力|普及+

本文涉及知识点

C++贪心

[蓝桥杯 2021 国 C] 巧克力

题目描述

小蓝很喜欢吃巧克力,他每天都要吃一块巧克力。

一天小蓝到超市想买一些巧克力。超市的货架上有很多种巧克力,每种巧克力有自己的价格、数量和剩余的保质期天数,小蓝只吃没过保质期的巧克力,请问小蓝最少花多少钱能买到让自己吃 x x x 天的巧克力。

输入格式

输入的第一行包含两个整数 x x x, n n n,分别表示需要吃巧克力的天数和巧克力的种类数。

接下来 n n n 行描述货架上的巧克力,其中第 i i i 行包含三个整数 a i a_i ai​, b i b_i bi​, c i c_i ci​,表示第 i i i 种巧克力的单价为 a i a_i ai​,保质期还剩 b i b_i bi​ 天(从现在开始的 b i b_i bi​ 天可以吃),数量为 c i c_i ci​。

输出格式

输出一个整数表示小蓝的最小花费。如果不存在让小蓝吃 x x x 天的购买方案,输出 − 1 −1 −1。

样例 #1

样例输入 #1

10 3 1 6 5 2 7 3 3 10 10 

样例输出 #1

18 

提示

【样例说明】

一种最佳的方案是第 1 1 1 种买 5 5 5 块,第 2 2 2 种买 2 2 2 块,第 3 3 3 种买 3 3 3 块。前 5 5 5 天吃第 1 1 1 种,第 6 6 6、 7 7 7 天吃第 2 2 2 种,第 8 8 8 至 10 10 10 天吃第 3 3 3 种。

【评测用例规模与约定】

对于 30 % 30\% 30% 的评测用例, n , x ≤ 1000 n,x \le 1000 n,x≤1000。

对于所有评测用例, 1 ≤ n , x ≤ 1 0 5 1\le n,x\le 10^5 1≤n,x≤105, 1 ≤ a i , b i , c i ≤ 1 0 9 1 ≤ a_i,b_i ,c_i\le10^9 1≤ai​,bi​,ci​≤109。

蓝桥杯 2021 国赛 C 组 I 题。

贪心

如果价格低的和价格高的,竞争同一天。淘汰价格高的。如果两个都能保留或都不能保留,结果一样。如果保留一个,显然保留价格低的合适。
按价格排序。
有序映射记录需要巧克了的天数。初始:1到x。
依次枚举各巧克力。
如果剩余数量为0,处理其它巧克力。
如果s中存在小于等于保质期的数字。将此巧克力分配一块到保质期内最后一天。如果没有,处理下一个巧克力。
如果最终s非空,返回-1。否则返回分配的巧克力之和。

2025年11月19

第x天吃一块保质期x的巧克力。
第x-1天吃保质期 ≥ x − 1 \ge x-1 ≥x−1的巧克力
⋮ \vdots ⋮
第1天吃保质期 ≥ 1 \ge 1 ≥1的巧克力。
第i天小根堆记录保质期 ≥ i \ge i ≥i的巧克力的价格和数量。

代码

核心代码

#include<iostream>#include<sstream>#include<vector>#include<map>#include<unordered_map>#include<set>#include<unordered_set>#include<string>#include<algorithm>#include<functional>#include<queue>#include<stack>#include<iomanip>#include<numeric>#include<math.h>#include<climits>#include<assert.h>#include<bitset>usingnamespace std;template<classT=int> vector<T>Read(int n,constchar* pFormat ="%d"){ vector<T> ret; T d ;while(n--){scanf(pFormat,&d); ret.emplace_back(d);}return ret;}template<classT=int> vector<T>Read(constchar* pFormat ="%d"){int n;scanf("%d",&n); vector<T> ret; T d;while(n--){scanf(pFormat,&d); ret.emplace_back(d);}return ret;} string ReadChar(int n){ string str;char ch;while(n--){do{scanf("%c",&ch);}while(('\n'== ch)); str += ch;}return str;}classSolution{public:longlongDo(int x, vector<int>& a, vector<int>& b, vector<int>& c){constint N = a.size(); vector<int>inxs(N);iota(inxs.begin(), inxs.end(),0);sort(inxs.begin(), inxs.end(),[&](int i1,int i2){return a[i1]< a[i2];}); set<int> need;for(int i =1; i <= x; i++){ need.emplace(i);}longlong ans =0;for(int i : inxs){for(int cnt =0; cnt < c[i]; cnt++){auto it = need.upper_bound(b[i]);if(need.begin()== it){break;}--it; need.erase(it); ans += a[i];if(need.empty()){return ans;}}}return-1;}};intmain(){#ifdef_DEBUGfreopen("a.in","r",stdin);#endif// DEBUGint x,n;scanf("%d%d",&x,&n); vector<int> a, b, c;int t1, t2, t3;for(int i =0; i < n; i++){scanf("%d%d%d",&t1,&t2,&t3); a.emplace_back(t1); b.emplace_back(t2); c.emplace_back(t3);}auto res =Solution().Do(x,a, b, c); cout << res << std::endl;return0;}

单元测试

int x; vector<int> a, b, c;TEST_METHOD(TestMethod11){ x =10, a ={1,2,3}, b ={6,7,10}, c ={5,3,10};auto res =Solution().Do(x, a, b, c);AssertEx(18LL, res);}TEST_METHOD(TestMethod12){ x =10, a ={1}, b ={100}, c ={9};auto res =Solution().Do(x, a, b, c);AssertEx(-1LL, res);}TEST_METHOD(TestMethod13){ x =10, a ={1}, b ={9}, c ={10};auto res =Solution().Do(x, a, b, c);AssertEx(-1LL, res);}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步ZEEKLOG学院,听白银讲师(也就是鄙人)的讲解。
https://edu.ZEEKLOG.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.ZEEKLOG.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

Read more

[AI提效-18]-豆包AI绘图提示词全攻略(新手可直接套用)

豆包AI绘图的核心的是“精准提示词=理想图片”,很多新手出图翻车,不是功能不好用,而是没理清提示词的核心维度,不知道每个维度该怎么描述、对应什么效果。本文将逐一拆解画风、画质、主题内容、环境、场景、色彩、灯光要求、构图、角度、图片比例10大核心要素,每个要素配“含义+示例+提示词模板”,结合完整案例详解,新手看完就能直接上手,再也不用瞎猜描述。 核心原则:提示词不用长,但要“每个维度都落地”,避免模糊表述(如“好看的图”“漂亮的风景”),用具体关键词替代,让AI精准get你的需求。 一、核心提示词维度详解(含示例+模板) 1. 画风(决定图片的“整体风格调性”,最基础也最关键) 含义:指图片的艺术风格、绘画/拍摄流派,直接决定图片的视觉质感,是提示词的“

By Ne0inhk
AI 自动化编程盛行,程序员失业是个xx命题

AI 自动化编程盛行,程序员失业是个xx命题

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 * AI 自动化编程盛行,程序员失业是个xx命题 * 一、引言 * 二、AI 自动化编程的发展现状 * 2.1 技术突破 * 2.2 应用场景 * 三、AI 自动化编程对程序员工作的影响 * 3.1 积极影响 * 3.2 消极影响 * 四、程序员不会被替代的原因 * 4.1 复杂问题解决能力 * 4.2 业务理解和沟通能力 * 4.3 伦理和安全考量 * 五、程序员应对 AI 浪潮的策略 * 5.

By Ne0inhk
把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

大家好,我是热爱探索AI前沿技术的LucianaiB。 前面我尝试了,感兴趣的可以才是部署一下试试 1.在 Windows 上部署 Openclaw:https://mp.weixin.qq.com/s/iF3ED1e649kkmdR26Y1xiw 2.把 Openclaw 接入到 Moltbook:https://mp.weixin.qq.com/s/QUrB50iwRGGdkl1LO-Tl8Q 相信很多技术爱好者都有这样的经历:趁着双十一或者大促,脑子一热买了一台腾讯云或者阿里云的服务器。买的时候雄心勃勃,想着要搭建博客、跑脚本、做图床。结果呢?大概率是跑了几个自动化签到脚本后,它就静静地躺在控制台里“吃灰”,每个月白白扣费。 但是在自己的电脑运行 Openclaw 无法做到24小时的在运行,于是我就想到了我有一个好久不用的腾讯云服务器,之前购买主要是跑一些自动化签到脚本,并没有实际做什么具体工作。于是我就想到把废弃的腾讯云服务器改为 Openclaw 的24小时的服务器。 于是,

By Ne0inhk
Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 支持 Nvidia显卡和Intel Arc GPU

Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 支持 Nvidia显卡和Intel Arc GPU

Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 Lada去马赛克工具、AI视频去马赛克、本地AI视频修复、一键启动AI工具、视频像素恢复神器 下载地址:https://pan.quark.cn/s/7819816715d6?pwd=Pnbx 之前在网上刷视频的时候,经常会遇到一个特别让人崩溃的问题——关键画面总被打上厚厚的马赛克。 想认真看内容,却只能看到一堆像素块,体验直接拉满折磨值。 对于图片马赛克 可以参考我的这篇文章来去除 【AI图片编辑模型】Qwen-Image-Edit-2511 十字鱼一键整合包分享|本地无限制生成 ai换装必备 4G显存可用 我前前后后试过不少所谓的去码工具,不是效果拉胯,就是要上传视频到云端处理,说实话这种私密视频谁敢随便传?直到最近发现了这个本地神器——Lada 本地一键启动包,才算是真正解决问题。 它直接在电脑本地跑AI模型,不联网、不上传、不限制,用起来相当舒服。 下载地址:https://pan.

By Ne0inhk