首页 > 其他分享 >wqs 二分学习笔记

wqs 二分学习笔记

时间:2024-08-23 11:51:37浏览次数:9  
标签:二分 费用 题解 wqs 笔记 斜率 fi

蒟蒻的第一篇学习笔记qwq

wqs二分用于解决此类问题

n个物品,从中选恰好m个,最大化收益。而且你发现,如果没有选m个的限制,这道题是非常好做的。

使用前提

1、恰好选k个,至多至少不行
2、答案满足凸性

什么是凸性?

设选i个物品时的收益为fi
如果把它画成函数,那么它长这样(上凸包)

或者这样(下凸包)

也就是说,每选一个点所额外获得的收益(即fi - fi-1, 在图中表现为斜率)单调递减(或递增)

于是,我们可以二分这个斜率,并快速求出这条线在凸包上的切点会在哪里。

下面是我个人认为比较难理解的地方,以上凸包为例讲解
我们现在已知一个斜率k,那么看图,我们得到 kx + b = f(x), b = f(x) - kx
一般题目中这个b是很好求的(详见后文例题),它表示在这种条件下,若没有取k个的限制,最优解是多少,即“无限制最优”。(因为我们注意到此时b是最高的一个截距)
而且一般此时可以知道x的值,即“取了多少个”。根据它来check此时的mid是否合法
那么我们就可以很轻松地求出f(x)

最后注意一个细节,求最终答案的时候是f(x) = ans * m + b,目的是防止这样的情况出现。

感性理解

就是给受到题目限制的特殊点加一个权值,通过增大或减小权值来使得取到的特殊点个数变多或者变少
那么我们就可以通过二分来确定这个过程,最后通过mid和m求出答案即可

和费用流的关系

这是稍进阶一点的,一般模拟费用流会用到。
考虑在费用流中,我们用spfa求增广路,每次找到的都是费用最小的路径,也就是说,我们每次找到的最短路费用单调不降。
既然增量单调不降低,那么总费用就是一个下凸包,可以使用wqs二分求解

例题:

就不写题解了,毕竟题解区写的很详细了

Tree I

最小度限制生成树

Raper 去看樱雪喵的题解qwq

标签:二分,费用,题解,wqs,笔记,斜率,fi
From: https://www.cnblogs.com/Nihachu-33/p/18359789

相关文章

  • 操作系统笔记1
    OS概念负责管理协调硬件,软件等计算机资源的工作为上层用户,应用程序提供简单易用的服务是一种系统软件OS功能和目标资源的管理者处理机管理 如:管理CPU调度存储器管理如:执行程序,需要将数据导入到内存文件管理如:文件夹与文件存储设备管理如:控制音响设备向上......
  • 【Android笔记】Android APK编译打包流程
    前言本文将介绍Android从一个项目打包成APK的过程,其中涉及AndroidJava和Kotlin文件、资源文件、清单文件、依赖jar包和so库等在打包过程中处理。步骤总体的打包流程如下图,下面就介绍下详细的打包步骤。1、将aidl文件编译成java文件在构建过程中,Gradle会调用AIDL编......
  • 今日份笔记奉上,前两天扎针灸手肿了打字不太方便学习进程搁置了,今天简单学了写Dos指令
    基本Dos指令打开CMD1.开始+系统+命令提示符2.Windows+R输入cmd3.在任意文件下按shift+右键打开powershell4.资源管理器地址栏+cmd+空格+回车以管理员方式运行开始中命令提示符可以管理员身份运行常用的Dos指令#盘符切换#查看当前目录下的所有文件dir#切换目录cd#......
  • 数论学习笔记
    积性函数一般我们只需要考虑定义域在\(\mathbb{Z}\)就够了,什么实数,复数都不用管。如果函数\(f(x)\)满足对于任意的\(a,b\)且\(\gcd(a,b)=1\),都有\(f(ab)=f(a)f(b)\)。欧拉函数\(\varphi(i)\)\(\varphi(n)\)定义为大于等于\(1\)且小于\(n\)且与它互质的数的个数......
  • wiz 为知笔记服务器 docker 跨服务器迁移爬坑指北
    本文主要是介绍wiz为知笔记服务器docker从旧服务器迁移到新服务器的步骤以及问题排查。旧服务器升级wizdocker目的:保持和新服务器拉取的镜像版本一致。官方只留了wizdocker镜像最新版,拉取不了旧版本镜像,所以先升级旧服务器上的wizdocker。升级方法dockerstopwiz......
  • wiz 为知笔记服务器 docker 跨服务器迁移爬坑指北
    本文主要是介绍wiz为知笔记服务器docker从旧服务器迁移到新服务器的步骤以及问题排查。旧服务器升级wizdocker目的:保持和新服务器拉取的镜像版本一致。官方只留了wizdocker镜像最新版,拉取不了旧版本镜像,所以先升级旧服务器上的wizdocker。升级方法dockerstopwiz......
  • Java学习笔记8-数据类型
    Java中主要有八种基本数据类型:byte、short、int、long、float、double、boolean、char。各种数据类型作用:1、byte:8位、有符号的以二进制补码表示的整数。min:-128(-2^7)。max:127(2^7-1)。default:0。对应包装类:Byte。2、short:16位、有符号的以二进制补码表示的整......
  • Java学习笔记7-变量
    1.1变量是程序的基本组成单位不论是使用那种高级别语言,变量都是其程序的基本组成单位,比如1.2概念变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。1.3变量的使用步骤1)声明......
  • Java学习笔记5—数据库日志文件
    1.slowlog慢SQL记录2.binlog*记录数据库执行的写操作(不包括查询)信息,以二进制的形式保存在磁盘中。使用场景:主从复制(在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog来达到主从数据一致。)和数据恢复(mysqlbinlog)binlog日志有三种格式,分......
  • 斯特林数学习笔记
    定义第二类斯特林数\(n\bracem\)表示\(n\)个两两不同的元素划分为\(m\)个互不区分的非空子集的方案数;第一类斯特林数\(n\brackm\)表示\(n\)个两两不同的元素划分为\(m\)个互不区分的非空轮换(可以理解为环)的方案数。第二类斯特林数的递推式:\({n\bracem}={n-1\bra......