首页 > 其他分享 >WQS二分/带权二分/凸包优化

WQS二分/带权二分/凸包优化

时间:2023-07-15 17:22:09浏览次数:44  
标签:二分 WQS 凸包 带权 权值 物品 times

WQS二分/带权二分/凸包优化

应用范围

  1. 限制个数:给定一些物品选物品的限制条件,要求刚好选 \(m\) 个,让你最大化(最小化)权值。
  2. 单调性:选的物品越多,权值越大(越小)。

分析

1.原理解释:

假设限制不固定,当选 \(x\) 个时,最大权值为 \(f(x)\)。算法的核心就是将“选取物品”这一操作赋予权值,即每选择一个物品,我们将总权值加 \(C\)。这个 \(C\) 就是我们二分的东西。设经过我们“赋予权值操作后”,式子的值变成了 \(b\).可以得到 \(b=f(x)+C \times x\)。

若我们二分,选定一个 \(C\) 的值,在 不考虑选 \(m\) 个物品的情况下 进行 \(dp\)。此时我们不仅要记录最小权值,还要记录这个权值对应的,选的物品个数。根据上文,我们便得到了 \(b\) 和 \(x\).又已知 \(C\),就可以算出\(f(x)\).

当然,现在的 \(x\) 不一定就是题目要求的 \(m\),但由于问题具有单调性(见上),当 \(C\) 更小时,选择的物品会变少,\(x\)越大,当 \(C\) 更大时,选择的物品会变多,\(x\) 越大。根据 \(x\) 和 \(m\) 的大小关系,不断调整 \(C\)的值,直到 \(x=m\).这时再根据 \(b\),\(x\) 和 \(C\) 算出 \(f(x)\).


上面所描述的是一种理解的思路。下面我们把问题转化为“凸包问题”。

上文有这样一个式子:\(b=f(x)+C \times x\)。为了方便,现在把 \(b=f(x)+C \times x\) 变为 \(b=f(x)-C \times x\).(实际上只是把提前 \(C\) 变为 \(-C\),没有本质区别)。

发现这个式子形如 \(b=y-k \times x\). 把 \((x,f(x))\) 设为一个点。这些点的集合为凸包(不会证qwq,感觉只能用上一种思路证明单调性)。\(C\) 表示斜率。就相当于用一条斜率为\(k\)的直线切这个凸包。切线的截距显然是最小的(上一种理解思路就重合了)。切到的这个点为 \((x,f(x))\).不断调整 \(C\) 的过程就相当于在不断调整切线的斜率,使切线刚好切到\(m\).

细节处理

有时候,会发现当 \(C=p-1\) 时,\(x=m-1\),而 \(C=p\) 时,\(x=m+1\)。我们可以将 \(C\) 二分到小数,但是这样可能为\(T\).实际上,不需要小数也是正确的。参见Creeper_LKF的博客.

题目链接

http://222.180.160.110:1024/contest/3896

标签:二分,WQS,凸包,带权,权值,物品,times
From: https://www.cnblogs.com/bwartist/p/17556544.html

相关文章

  • Resnet18实现二分类
    前面一篇内容讲解了如何利用Pytorch实现ResNet,这一篇我们用ResNet18实现一个二分类。接下来从模型、数据及训练三个方面展开。一、目标利用ResNet18将以下数据分为两类class_0class_1二、模型ResNet系列的模型在上一篇已经详细介绍了,这里采用ResNet18。1.模型导入......
  • 算法小菜鸟成长记录Day01-二分查找和双重指针
    二分查找和双重指针今天是代码随想录刷题的第一天,刚开始刷的时候昏昏欲睡,其中用时3h主要实现以下几个部分二分查找:其中二分查找中其收获最大部分就在于对左开右闭区间的理解,如果都是闭区间也就是【a,b】,那么在while中的条件就为while(left<=right),确保其中是拥有元素也就是......
  • 小波神经网络,二分类,python
    小波神经网络参考博客https://blog.csdn.net/weixin_42051846/article/details/128765295?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168915375016800215081571%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=16891537501680021508......
  • 二分图学习笔记
    定义对于一个无向图\(G=(V,E)\),如果存在点集\(A,B\),满足\(a\neq\varnothing\),\(b\neq\varnothing\),\(A\capB=\varnothing\),\(A\cupB=V\),且\(\forallu,v\inA\)或\(u,v\inB\),都有\((u,v)\notinE\),则称这个图是一个二分图,\(A\)称为这个二分图的左部,\(B\)称为右部。......
  • newcoder61132D <最短路 二分答案>
    题目松鼠回家思路对n个结点的松果个数排序,二分最大松果个数check(x),跑最短路,在不访问比x松果个数多的节点的情况下,从起点到终点消耗的最小体力代码Code#include<iostream>#include<algorithm>#include<vector>#include<cstring>#include<queue>using......
  • P2824 排序(二分答案)
    题目简述给出一个$1$到$n$的排列,现在对这个排列序列进行$m$次局部排序,排序分为两种:0lr表示将区间$[l,r]$的数字升序排序1lr表示将区间$[l,r]$的数字降序排序这里是对下标在区间$[l,r]$内的数排序。最后询问第$q$位置上的数字。分析&性质申必题,对......
  • 第三节 二分
    介绍故事分享......
  • 二分
    23.7.11Day2二分 这个二分模板好记欸。while(l<=r){intmid=(l+r)>>1;if(check(mid))l=mid+1,ans=mid;elser=mid-1;}RestTheShades 前缀和记录,然后单独计算一下两头的线段,也就是蓝色那一段,用总的减不在里面的就可以。还有一......
  • poj 1064 高精度 二分
    CablemasterTimeLimit: 1000MSMemoryLimit: 10000KTotalSubmissions: 32191Accepted: 6888DescriptionInhabitantsoftheWonderlandhavedecidedtoholdaregionalprogrammingcontest.TheJudgingCommitteehasvolunteeredandhaspromisedtoorganizethe......
  • 浮点数二分模板
    题目给定一个浮点数$n$,求它的三次方根。输入格式共一行,包含一个浮点数$n$。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留$6$位小数。数据范围$−10000≤n≤10000$输入样例:$1000.00$输出样例:$10.000000$思路浮点数二分可以直接分,无需考虑边界情况......