【某不知名比赛】蛋糕(贪心+链表优化)

本文介绍了一种利用贪心算法优化配料匹配的方法,通过将面粉种类维护在一个链表中,并对奶油进行排序,实现在O(N+M)时间复杂度内完成匹配。文章详细解释了算法思路及特殊情况处理,强调了向前置节点走的重要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述初想法:这道题刚刚看到的时候居然感觉像是匈牙利???但是看了数据之后崩溃了!郑犇告诉我说这道题他的想法是网络流。然后我并没有什么想法,就贪心耍了一下,还崩掉了。

题解:
这道题的话,正解应该是贪心+优化(虽然说我刚知道的时候是有一点点震惊的!可以用一个链表去维护当前数量的面粉种类有多少种。然后可以再把奶油从大到小排序,在链表上“游走”。数量不足时就向链表小的方向走,数量多余时就往大的方向走(也就是说能尽量往前走就往前走)。有一种特殊情况需要考虑的是:如果此时减的是这个数量de一部分,那么我们就把扣除的那部分到前一个链表+1,然后更大一个链表的种类数也是+1,然后把当前这个点删掉。这样就相当于减了1

时间复杂度为O(N+M)
为什么可以到线性呢?
比如说我当时匹配的是第bi个,bi是从小到大排序的,所以bi+1一定小于等于bi,匹配的数量也是不断递减的。但是我链表上所指到的节点比原先大,所以原来的数目是只会多不会少的(至少是不变的)。那我们只会往前置节点走。

代码实现:
待填坑(数组模拟链表实在是太难写惹!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值