湄圳啸 发表于 2025-10-5 16:57:45

洛谷P3545 题解

洛谷P3545(原题指路)

很典的一道带反悔贪心

题意简述

一共\(n\) 天。
第 \(i\) 天上午进货 \(ai\) 件商品,中午有一个顾客需要 \(bi\) 件商品,可以满足他或无视他。
要满足顾客则必须要有足够的库存。问最多能满足多少位顾客,以及能满足的是哪些顾客。
解题思路

(带反悔贪心)

开一个堆存储顾客信息,其中购货量多的顾客在上。
开一个数组记录顾客是否被满足。
用ans记录满足了的顾客的数量。
遍历 \(1-n\) 的每一天。
接下来分两种情况:

[*]如果当天进货后库存足够,则直接满足顾客的需求,记录满足了该顾客,并且把他的信息存入堆中
[*]如果当天进货后库存不足,则弹出堆顶元素 \(lins\) ,并且比较当前顾客与 \(lins\) 顾客的信息

[*]如果lins的购货量多于当前顾客,则同样是多满足了一个顾客,满足当前顾客时剩余的存货量要多于满足lins顾客时剩余的存货量。则此时满足当前顾客比满足 \(lins\) 顾客更优。因此反悔满足 \(lins\) 顾客的决定——将 \(lins\) 顾客的信息从堆中删除(删除堆顶元素),并且将 \(lins\) 顾客标记为没有满足;将当前顾客标记为满足,并将他的信息存入堆中。
[*]反之,如果 \(lins\) 的购货量少于当前顾客,那么维持原状比反悔并满足当前顾客更优,则直接无视当前顾客即可

最后输出ans;并且遍历标记数组,若顾客被满足则输出其编号。
代码展示

#include#define int long longusing namespace std;int n,hw,ans;bool vis;struct node{        int a,b,bh;}mm;struct cmp{        bool operator() (node x,node y){                return x.b

接快背 发表于 2025-10-31 03:00:56

这个有用。

左丘平莹 发表于 2025-11-27 14:55:00

不错,里面软件多更新就更好了

夔新梅 发表于 2025-12-10 14:48:39

感谢分享,下载保存了,貌似很强大

百里宵月 发表于 2025-12-12 01:39:13

谢谢分享,辛苦了

轮达 发表于 2026-1-15 18:51:14

热心回复!

当贵 发表于 2026-1-16 12:43:46

这个好,看起来很实用

距佰溘 发表于 2026-1-17 16:19:24

yyds。多谢分享

殳世英 发表于 2026-1-18 03:58:25

不错,里面软件多更新就更好了

史华乐 发表于 2026-1-18 07:15:26

不错,里面软件多更新就更好了

后沛若 发表于 2026-1-19 22:41:09

过来提前占个楼

秦晓曼 发表于 2026-1-20 10:47:52

这个有用。

欤夤 发表于 2026-2-1 02:43:43

收藏一下   不知道什么时候能用到

锑砖 发表于 2026-2-3 05:19:14

分享、互助 让互联网精神温暖你我

高清宁 发表于 2026-2-8 01:41:52

感谢发布原创作品,程序园因你更精彩

肿抢 发表于 2026-2-9 14:01:18

这个有用。

向梦桐 发表于 2026-2-9 16:56:08

鼓励转贴优秀软件安全工具和文档!

连热 发表于 2026-2-10 04:26:31

鼓励转贴优秀软件安全工具和文档!

路逸思 发表于 2026-2-10 13:27:29

热心回复!

押疙 发表于 2026-2-11 16:22:23

很好很强大我过来先占个楼 待编辑
页: [1] 2
查看完整版本: 洛谷P3545 题解