首页 > 其他分享 >[dp 小计] wqs 二分

[dp 小计] wqs 二分

时间:2024-04-18 21:13:54浏览次数:25  
标签:二分 wqs 小计 凸包 斜率 强制 dp

天才算法!
国外叫 Aliens trick (外星人 trick) ,真的太强了。
其实是因为 IOI2016 Aliens 这道题考了这个算法才开始普及。

解决问题

wqs 二分一般用来解决如下问题。

给定 \(n\) 个数,求强制选 \(m\) 个的价值最大。

如果不是强制选 \(m\) 个,这类问题很好做。
现在问题就是怎么取消掉强制取 \(m\) 个这个限制。

这就是 wqs 二分的用途,它能在一定条件下优化 dp ,\(O(nm)\to O(n\log m)\)。

模型引入

wqs 二分有一个重要条件。
令 \(g(i)\) 表示当强制选 \(i\) 个时的最大价值,把所有 \((i,g(i))\) 在坐标轴上画出来,最终形成一个凸包。这就是算法实施的必要条件。

还有一个必要条件就是,每个价值计算是独立的,也就是说,\(w(\{x_1,x_2,x_3...\})=w(x_1)+w(x_2)+w(x_3)...\)

算法分析

我们假设当前凸包是上凸的。
明显,像斜率优化那样,如果我们拿一条直线去切这个凸包(也就是把这条直线从上往下移,碰到的第一个点),那么,很容易的发现,斜率越大,切到的点越往左。

我们想,如果拿一条斜率为 \(k\) 的直线去切,切到的是哪个点。
明显,如果对于每个点都划一条斜率为 \(k\) 的直线,那么与 \(y\) 轴交点最上的的那个点,就是被切的点。

根据小学的知识,我们知道交点的计算公式是 \(f(x)=b=g(x)-kx\)
想想这是什么。
这不就是等价于,把每个物品价值减 \(k\) ,就是 \(w(x)\to w(x)-k\)
然后,你要求 \(\max(f(x))\) ,不就是等价于取消了强制取 \(m\) 的限制了吗!

在取消资格限制的同时,你还能把取到 \(\max(f(x))\) 的 \(x\)

标签:二分,wqs,小计,凸包,斜率,强制,dp
From: https://www.cnblogs.com/g1ove/p/18144397

相关文章

  • MySQL常用管理命令、常用函数小计
    1、Windows系统是MySQL服务器的关闭、重启 (mysql为服务名)关闭服务:netstopmysql启动服务:netstartmysql 2、连接mysql服务器在cmd窗口执行命令:mysql-h127.0.0.1-P3306-uroot-p -h127.0.0.1:指定主机IP  -P3306:执行mysql服务端口......
  • Pyecharts制作动态GDP柱状图
    学习使用pyecharts制作动态柱状图使用csv模块进行csv数据文件处理importcsvfrompyecharts.chartsimportBar,Timelinefrompyecharts.optionsimport*frompyecharts.globalsimportThemeTypedefdealCSVFile():"""读取处理csv数据文件:retu......
  • DP10RF001一款200MHz~960MHz 低功耗(G)FSK/OOK无线收发芯片应用无线遥控工控设备无线
    产品概述.DP10RF001是一款工作于200MHz~960MHz范围内的低功耗、高性能、单片集成的(G)FSK/OOK无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器,只需配备简单、低成本的外围器件就可以获得良好的收发性能。芯片支持灵活可设的数据包格式,支持自动应......
  • 超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯
    产品概述DP32RF002是深圳市动能世纪科技有限公司研制的基于ARMCortex-MO+内核的超低功耗高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同时内部集成了完整的射频......
  • 获取AWS lightsail Windows server RDP密码
    场景创建lightsail的linuxserver时已经生成SSHkey,建立Windows的实例(Instance)时,并未提示输入管理员密码。登录时,找密码登录,提示“DecipheryourpasswordYouusedthe"keyname"keywhenyoucreatedthisinstance.Seetheinstructionstodecipherthepasswordfromthe......
  • 06_QT网络编程之UDP通信
    QT网络编程之UDP通信udp编程​ udp不分客户端和服务器,只需要使用一个类QUdpSocket。代码Udp.pro#-------------------------------------------------##ProjectcreatedbyQtCreator2024-04-13T23:07:41##-------------------------------------------------QT......
  • 换根dp
    换根dp  背景对于一颗无根树而言,假如我们有着把每个节点当成根节点的需求时,那么原先的直接从根节点开始搜索就无法满足我们的时间效率此时我们就需要考虑转换策略研究,有没有什么好的方法能够不去把每个节点当成根节点都跑一次搜索考虑我们手中已有的信息,我们知道跑一次搜......
  • LeetCode 1315. Sum of Nodes with Even-Valued Grandparent
    原题链接在这里:https://leetcode.com/problems/sum-of-nodes-with-even-valued-grandparent/description/题目:Giventhe root ofabinarytree,return thesumofvaluesofnodeswithan even-valuedgrandparent.Iftherearenonodeswithan even-valuedgrandpar......
  • R中遇到dplyr::filter等函数冲突--优先设置某个包
    用conflicted包解决参考:https://blog.csdn.net/qazplm12_3/article/details/119621588#1安装软件包install.packages("conflicted")#2显示冲突的包library(conflicted)conflict_scout()#3设置优先使用的包的函数(例如上述的`filter()`:dplyrandstats冲突)#优先使......
  • 状压dp
    简介状压dp是一种将一堆\(0\)和\(1\)压缩成一个二进制的dp,具体如下:\(dp_{0/1,0/1,\dots,0/1}\rightarrowdp_{x}\)这里的\(x\)是一个整数,但我们会把他看作是他的二进制形式。虽然时间复杂度没有变,但写起来更方便。状压dp一般适用于\(N\le20\)的数据范围。优化由于......