首页 > 背包
头像 zzugzx
发表于 2020-06-10 12:44:15
题目链接 题意:题解: AC代码 /* Author:zzugzx Lang:C++ Blog:blog.csdn.net/qq_43756519 */ #include<bits/stdc++.h> using namespace std; #define 展开全文
头像 ThinkofBlank
发表于 2020-06-10 16:46:46
注意,答案直接向下取整!!! 被这个玩意儿坑了,好惨啊。。。 关于这道题,我们先来看看m是奇数怎么做。 很明显,我们可以考虑枚举中位数,然后判断其是否可行即可。这样,我们先对所有物品按价值从小到大排序。 那么,如果一个物品可以作为中位数,当前仅当存在一种方案,从这个物品的左边选个物品,再从它右边选个 展开全文
头像 sunrise__sunrise
发表于 2020-06-08 10:22:40
优先队列+二分 题目需要找到中位数最大,那么我们直接按照价值升序排序,再把体重升序排序。从头把m对半分开,求前m最小和后m最小,如果是奇数最终加上当前这位的体积比v小于等于,直接这一位的价值就是答案。如果是偶数,这个会复杂一点,因为你无法保证某一次价值大的体重小,但是可以发现,我们是求中间两个取平均 展开全文
头像 DaMing
发表于 2020-06-12 11:01:16
Slove:要求价值的中位数,那首先要对价值进行排序,m为奇数的情况下然后我们枚举每个位置,如果该位置是中位数的最大,那么这个位置前面选m/2个的重量加上后面m/2个重量,使他们小于V就说明这个位置可以取得的,只需要维护一个大小为m/2 的堆就行,每次pop掉堆中最大的m为偶数的时候同理但是中间需要 展开全文
头像 Kur1su
发表于 2020-06-11 08:37:05
Description Applese有1个容量为v的背包,有n个物品,每一个物品有一个价值ai,以及一个大小bi然后他对此提出了自己的疑问,如果我不要装的物品装的价值最大,只是一定需要装m个物品,要使得求出来的物品价值的中位数最大Applese觉得这个题依然太菜,于是他把这个问题丢给了你当物品数量 展开全文
头像 在刷题的单身狗很开心
发表于 2023-09-20 18:35:47
做这道题的时候一开始想到了对顶堆但发现如果根据输入逐步使用对顶堆的话,不好实现最优的选择。 看了题解才知道这不是一道对顶堆的题目,可以使用对物品的价值进行排序,然后某个物品能否作为中位数可以通过向左取(m-1)/2个物品,向右取(m-1)/2个物品。取左右物品的最小重量总和然后加上中位数可以判 展开全文
头像 blowhail
发表于 2020-06-16 16:03:43
思路:我们分为奇数和偶数的情况。如果是奇数,相当于在左右两边各取m/2个数,如果是偶数,左边取m/2-1个,右边取m/2个。因此,我们先枚举出每一个可能是中位数的数左右两边要取的数的和。首先先对物品按照价值进行排序,然后利用优先队列维护已存物品的体积,如果放的数量超过了要取的数,就去掉占用体积最大的 展开全文
头像 shyyhs
发表于 2021-01-18 10:51:21
我觉得直接二分答案就好了,不需要讨论,只需要将数组按容量大小排序。我觉得答案是有二分性的。
头像 JQK2020
发表于 2020-06-10 18:05:38
题目描述Applese有1个容量为v的背包,有n个物品,每一个物品有一个价值ai,以及一个大小bi然后他对此提出了自己的疑问,如果我不要装的物品装的价值最大,只是一定需要装m个物品,要使得求出来的物品价值的中位数最大Applese觉得这个题依然太菜,于是他把这个问题丢给了你当物品数量为偶数时,中位数 展开全文
头像 芙蓉王媛
发表于 2022-09-02 21:00:49
链接:https://ac.nowcoder.com/acm/problem/17315 来源:牛客网 Applese有1个容量为v的背包,有n个物品,每一个物品有一个价值ai,以及一个大小bi 然后他对此提出了自己的疑问,如果我不要装的物品装的价值最大,只是一定需要装m个物品,要使得求出来的物品价 展开全文