首页 > 其他分享 >动态规划——带权二分优化DP 学习笔记

动态规划——带权二分优化DP 学习笔记

时间:2023-10-08 16:15:38浏览次数:41  
标签:二分 mid 最小值 带权 https DP

动态规划——带权二分优化DP 学习笔记

引入

带权二分其实并不一定用于优化 DP,也可能用于优化贪心等最优化的算法。

带权二分也叫 WQS 二分,最初由王钦石在他的 2012 年国家集训队论文中提出。

定义

使用情况

  • 要解决一个最优化问题(求最大 / 最小值)
  • 有一个限制,一般是某个参数要求一定恰好为 \(k\)

而带权二分就可以很好的解决[恰好 \(k\) 个]的限制;以选物品取最大收益为例:

  • 设 \(f(k)\) 为恰好选 \(k\) 个时的最大收益,将所有的 \((k, f(k))\) 画出来,图像必须组成一个凸包。
  • 因此就可以打表看,是否组成了一个凸包,如果是,则可以考虑带权二分优化。

使用方法

例:求 \(f(k)\) 的值,我们不会求 \(f(k)\) 或者其复杂度不可接受,但是我们可以求出所有 \(1\sim n\) 中的最优解 \(f(t)\) 及对应的 \(t\),因此我们就可以通过一些处理,将 \(f(k)\) 变为最小值,即将全局最优解变为 \(k\)。

什么方法?我们设一个额外的 \(w\),每次选一次物品以后就将结果加上 \(w\),也就是,我们设一个新的转移方程 \(g_k=f_k+kw\)。

注意:严谨的,是『选一次』,不是『选一个』。因为有的题目选一次对应一段区间,即多个物品。

可以预见到的,原函数(左)会变为(右):

image

要注意的是,\(w\) 也可能为负;因此总会有一个 \(w\) 使得全局最优解为 \(g(k)\),如下:

  • 可以想见,如果 \(w\) 继续增大,那么最小值点 \(x_0\) 会继续变小;
  • 如果 \(w\) 减小以至于变成负数,那么最小值点 \(x_0\) 会不断变大;

那么总会有一个 \(w\),使得最小值在 \(k\) 处取到,那不就可以二分了嘛。

我们二分一个值 \(w\)(边界可以设置地大一些,当然也可能得根据题目的数据范围调一调),现在问题转化为,求 \(g(x)\) 的最小值点 \(x_0\)。

此时,不管用 DP 还是贪心啥的方法,求出 \(g(x)\) 的最小值 \(g(x_0)\),顺便求出此时的最小值点 \(x_0\)。

  • \(x_0<k\),那就让 \(w\) 变小点;
  • \(x_0>k\),那就让 \(w\) 变大点。

最终,我们就能让 \(x_0=k\),也就是当全局最优解取到 \(g(k)\) 的时候,我们是不是就成功的求出了原问题 \(f(k) = g(k) - kw\) 呢?

警惕

既然是二分,就一定要仔细考虑 \(l,r,mid\) 的取值以及更新边界的条件,总之,注意代码细节!

应用

例题讲解

题目:P2619 Tree I

  • 画出函数来:

image

  • 凸函数好吧,所以给白边加一个 \(w\) 的额外权:
int l = -110, r = 110;
while (l <= r) {
    int mid = l + r >> 1; Kruskal(mid);
    if (now0 >= k) {
        ans = ansg - k * mid;
        r = mid + 1;
    } else r = mid - 1;
}
  • 此题完结。

题单

见:https://www.luogu.com.cn/training/393257

Reference

[1] https://www.mina.moe/archives/6349
[2] https://www.cnblogs.com/Dfkuaid-210/p/wqs_bisect.html
[3] https://blog.csdn.net/Emm_Titan/article/details/124035796
[4] https://blog.csdn.net/weixin_45429627/article/details/109270538
[5] https://blog.csdn.net/Huah_2018/article/details/113796445

标签:二分,mid,最小值,带权,https,DP
From: https://www.cnblogs.com/RainPPR/p/wqs-binary-dp.html

相关文章

  • 资源清单编写MySQL,wordpress
    目录mysqlwordpresshttp://k8s.driverzeng.com/v1.19/mysql[root@master-1mysql]#catmysql.yamlapiVersion:"v1"kind:"Pod"metadata:name:mysql57//资源清单叫mysql57spec:nodeName:node-1......
  • wordpress
    目录压测wordpress才分3个网络资源in压测[root@master-1ai]#catwordpress.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:mysqlspec:replicas:1selector:matchLabels:app:mysql01template:metadata:labels:ap......
  • dokcer命令安装wordpress
    目录##1.镜像准备[root@docker01~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEcentos7eeb6ee3f44bd24monthsago204MB##2.创建容器[root@docker01~]#dockerrun-p80:80-dcentos:7/bin/bash-c"while......
  • DockerFile部署wordpress并制作成镜像实践
    目录DockerFile部署wordpress实践部署wordpress准备Dockerfile所需文件开始制作成镜像访问网页将wordpress打包成镜像DockerFile部署wordpress实践部署wordpress#创建dockerfile目录[root@docker02~]#mkdir/Dockerfile#进入dockerfile目录[root@docker02......
  • wrodpress搭建-e变量的
    目录4.在命令行中输入:envsubst<decoder.conf.template>decoder.conf如果只想替换THREAD_NUM,不想替换GPU_ID,那就在命令行输入:envsubst'${THREAD_NUM}'<decoder.conf.template>decoder.conf......
  • 不关站备案技巧分享 亲测WordPress隐藏首页正常通过备案
    官老爷规定备案过程中需要关闭网站、不要问为什么,但是正常关站会影响网站收录、流量及口碑等一系列问题,那么有没有办法(1)既不影响搜索引擎收录(2)又能顺利通过备案呢?答案是:可以。简单说就是利用JS和CSS技术隐藏网站首页,但对于搜索引擎来说首页还是正常存在的,而且其它内页均不受影响......
  • wordpress - wp_cron 计划但未触发
    我正在尝试使用wp_schedule_single_event运行在用户操作时触发的后台脚本,虽然我已经确认事件正在安排中并且wp_cron认识到预定的时间已经过去,但它不会触发事件处理程序。更复杂的是,代码在我安装的本地WP上运行良好,但在我的服务器上什么也不做。要安排事件,我正在使用:if(......
  • 彻底解决 WordPress cURL error 28 错误
    cURL连接超时。这种情况最普遍,这里的超时并不是完全不可连接,而是因为网络状况或其它原因数据传输缓慢,超过连接的时间限制导致传输中断引起的错误。不论是何种原因导致连接超时,都可以通过增加超时限制来解决此问题。但URL完全不可访问此方法是解决不了的。首先将WordPress......
  • 二分
    #include<bits/stdc++.h>usingnamespacestd;booljudge(intx){}intmain(){intl,r;//000000000111111111while(l<r){intmid=l+r>>1;if(judge(mid))r=mid;elsel=mid+1;}//11......
  • 动态规划——DP与最短路 学习笔记
    动态规划——DP与最短路学习笔记例题:P2761软件补丁问题,很容易写出转移方程:\(dp_s\leftarrowdp_{s\setminusF_1\cupF_2}+t_i\),但是这样就出现了环,没有形成DAG就无法跑动态规划了,怎么办?可以将原问题转换为[最短路]:将原状态\(s\)记为一个点,将原转移路径记为一条边\(......