题意 题目链接 为了固定S**p*鸽鸽,whx和zzt来到鸽具商店选购鸽子固定器. 鸽具商店有 nn 个不同大小的固定器,现在可以选择至多 mm 个来固定S**p*鸽鸽.每个固定器有大小 sisi 和牢固程度 vivi. 如果他们选购的固定器大小不一或是不牢固,固定S**p*鸽鸽的时候肯定会很头疼,所以定义选择的物品总牢固程度和的 dvdv 次方减大小极差的 dsds 次方为这个方案的价值,求不同选购方案中,价值的最大值. Sol 非常好的一道猜结论题 如果我们按$s$排序后,我们就可以枚举$m…
题目描述 有 \(n\) 个物品,每个物品有两个属性:权值 \(v\) 和大小 \(s\). 你要选出 \(m\) 个物品,使得你选出的物品的权值的和的 \(d_v\) 次方减掉大小的极差的 \(d_s\) 次方最大. \(n\leq 200000,m\leq 50,1\leq d_v,d_s\leq 2\) 题解 1. 如果选的物品的数量不到 \(m\) 个,且大小不是连续的,那么一定不是最优的. 因为如果不是连续的,那么可以多选一个大小在这些物品之间的物品,使答案更优. 2. 如果选了 \(…
题目链接 \(Description\) 选最多\(m\)个物品,使得它们的\((\sum vi)^{dv}-(s_{max}-s_{min})^{du}\)最大. \(Solution\) 先把物品按s排序就可以直接判断后一项. 我们发现当要判断的区间的长度\(\leq m\)时,区间内的所有数都要选(后一项都确定了). 当区间长度\(>m\)时,自然是选\(v\)最大的\(m\)个.可以用链表把\(v\)最小的逐个删去. 发现删掉\(x\)的话我们只需要用\(x\)附近\(m\)个数更新答案…
#386. [UNR #3]鸽子固定器 题目链接 官方题解 分析: 神奇的做法+链表. 首先按照大小排序. 对于小于选择小于m个物品的时候,这个m个物品一定是一段连续的区间.因为,如果中间空着一个物品没选,而有没选到m个,还可以再选,于是选上空着的,不会增加花费,还增加了价值,所以可以直接枚举一个左端点,一个右端点,确定所有长度小于等于m个区间,然后计算即可. 如果等于m个物品,在上面的区间上可能不是连续的了.于是我们考虑选的这m个物品中的牢固度最小的x,然后再选m-1的物品(牢固度)比它大的.…
[UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那\(m\)个东西. 考虑优化这个过程,我们枚举右端点,左端点向左移动,每次插入一个元素,用堆来维护选择的过程.这样子复杂度可以做到\(O(n^2logn)\). 考虑继续优化这个过程,首先如果右端点一旦被弹出堆这个过程就可以终止了,这个很显然. 通过这个过程,我们也可以明白如果选择的个数不超过\(m…
link (似乎很久没写题解了) 题意: n个物品,每个物品有a,b两个值,给定A,B,现在最多选其中m个,要求最大化选出的物品中[b权值和的B次方-a极差的A次方]. $n\leq 2\times 10^5,m\leq 50.$ 花絮: 大概全场最早ac的两人是miaom&wzf2000,用了非标算的“神奇的做法”,太强辣. 题解: 按照a排序以后转化为选定一个区间以后最大化区间内部的b权值和. 然后考虑两种情况: 如果区间长度小于等于m,那么一定是选择连续一段. 否则,区间内部剩余没有选择的…
传送门 题解 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v) temp…
题解 堆+贪心 题意就是给你\(n\)个物品,让你最多选\(m\)个 每个物品有两个属性\(a_i,b_i\) 最大化\((\sum_{a_i})^{dv}+(max(b_i)-min(b_i))^{ds}\) 首先后面的那个东西看着不是很舒服 但是按照\(b\)为关键字排个序就可以消除\(b\)的影响了 那么我们只考虑\(a\)即可 以后我们可以发现答案所选择的物品一定是一个区间内最大的\(k\)个物品 所以我们可以固定一个右端点 然后不断向左扫去找前\(k\)大的值 这个东西可以用一个小根堆…
地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所在位置是 k 的最大代价. #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; int rdn() { ;;char ch=getc…
牢骚:本篇博客两个星期前已经存为草稿,鉴于发生一些糟糕的事情,今天才基本完成.本人6月份应届毕业生一枚,毕业后当天来到帝都,之后也非常顺利,面试了俩家公司都成功了.一家做C++方面电商ERP,一家做wifi模块,觉得第二家公司小,薪资低,但是觉得好玩就去了.同时,在学校也喝了不少鸡汤,觉得公司小怎么了.然而去了不到20天,公司被深圳一家公司收购了,公司动员我去深圳,我尼玛我才来20多天啊,有木有?而且感觉公司做这么大的决定都是随时拍板的吗? 原本以为一个公司的生命力强到可以忽略的概率,然而当自己…