0/1 分数规划

news/2025/2/4 12:59:52/文章来源:https://www.cnblogs.com/laoshan-plus/p/18698103

0/1 分数规划

0/1 分数规划模型是指,给定整数 \(a_1,a_2,\dots,a_n\)\(b_1,b_2,\dots,b_n\),求一组解 \(x_i\in[0,1]\),使下式最大/最小化:

\[\frac{\sum_{i=1}^na_ix_i}{\sum_{i=1}^nb_ix_i} \]

换句话说,选一定的 \(a_i\)\(b_i\) 组成一个集合 \(S\),求

\[\frac{\sum a_i\in S}{\sum b_i\in S} \]

的最值。

这种问题的一般解决方法是设答案为 \(\mathit{ans}\),即

\[\mathit{ans}=\frac{\sum a_i}{\sum b_i}~, \]

然后将式子变形,得

\[\mathit{ans}\times\sum b_i+\sum a_i=0 \]

\[\sum(\mathit{ans}\times b_i+a_i)=0 \]

答案具有可二分性。所以我们解决这类问题的方法一般就是二分答案,初始 \(l=0,r=\infty\),每次判定 \(\sum(\mathit{mid}\times b_i+a_i)\) 的正负,直到找到在误差范围内最接近的答案。复杂度是 \(O(\log V)\) 的。

还有一种更高级的方法叫做 Dinkelbach 迭代法,没用。

最优比率生成树

一般来说 0/1 分数规划不会直接考,而是套在一些别的东西中,比如最优比率生成树。题意一般是给定一个图,每条边有两个边权 \(a_i,b_i\),求这张图的生成树的 \(\dfrac{\sum a_i}{\sum b_i}\)

依然二分,每次跑一遍 Kruskal 求出上面那个式子,然后二分答案判定即可。

[ARC026D] 道を直すお仕事

板子题,但注意到这题并不要求一定是棵生成树,所以边权为负的边一定是会选的,把所有边权为负的边选完之后再判断边权为正的边选不选。

using ll=long long;
constexpr int MAXN=10005,MAXM=10005;
constexpr double eps=1e-6;
int n,m;
struct Edge{ll u,v,c,t;
}e[MAXM];
int f[MAXN];
int fnd(int x){return f[x]==x?x:f[x]=fnd(f[x]);
}
double kruskal(double x){iota(f+1,f+n+1,1);int s=0;for(int i=1;i<=m;++i) if(x*e[i].t-e[i].c>=-eps) ++s;sort(e+1,e+m+1,[&](const Edge&a,const Edge&b){return x*a.t-a.c>x*b.t-b.c;});double res=0;for(int i=1;i<=s;++i){f[fnd(e[i].u)]=fnd(e[i].v);res+=x*e[i].t-e[i].c;}for(int i=s+1;i<=m;++i){int fx=fnd(e[i].u),fy=fnd(e[i].v);if(fx==fy) continue;f[fy]=fx;res+=x*e[i].t-e[i].c;}return res;
}int main(){n=read(),m=read();for(int i=1;i<=m;++i) e[i]={read()+1,read()+1,read(),read()};double l=0,r=1e18;while(r-l>eps){double mid=(l+r)/2;if(kruskal(mid)<-eps) l=mid;else r=mid;}printf("%.4f\n",l);return 0;
}

P4951 [USACO01OPEN] Earthquake

这道题求的是 \(\dfrac{F-\sum a_i}{\sum b_i}\)。同理,将原式变换为 \(F=\sum(\mathit{ans}\times b_i+a_i)\),每次二分答案判定和 \(F\) 的大小关系即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试会被AI替代吗?

最近,deepseek火了,不少测试小伙伴忧心忡忡,担心测试岗位被替代 我个人观点是:经验类测试技术短期内还是很难被替代的。大家也可以问问deepseek或者其它ai,我们来看下deepseek的观点: 附文字版:性能测试是否会被AI替代,取决于具体的测试场景、技术发展阶段以及人类与…

Java Stream 流

目录概述StreamOptional开始管道中间管道(中间操作)终止管道(终端操作)常用的 Stream 操作方法匹配(Match)查找(Find)遍历(ForEach)过滤(Filter)映射(Map)扁平映射(FlatMap)截断(Limit)跳过(Skip)排序(Sorted)去重(Distinct)汇总(Collect)归约(Redu…

R9000P能连接wifi但无法上网

问题描述:前一晚还正常使用,第二天打开就不能上网,可以连接WiFi,切换过不同WiFi都一样,排除WiFi原因,此时浏览器显示找不到DNS,估计就是dns解析出了问题 解决办法:先去CMD下,输入ipconfig /flushdns 再控制面板->网络和Internet->找到下图,点击WLAN点击属性,双…

PCIe扫盲——TLP Header详解(二)

下面用几个具体的例子来讲解TLP Header的格式与作用。因为内容较多,所以分为多篇文章分别进行介绍。第一篇(即本文)介绍IO Request、Memory Request和Configuration Request。第二篇文章(即TLP Header详解三)介绍Completion ,第三篇文章(即TLP Header详解四)介绍Messag…

PCIe扫盲——TLP Header详解(一)

事务层包(TLP)的一般格式如下图所示:前面的文章介绍过,TLP Header为3DW或者4DW,Data Payload为1-1024DW,最后的TLP Digest(ECRC)是可选的,为1DW。 TLP Header在整个TLP的位置如下图所示,需要注意的是,TLP Header的格式和内容都会随着TLP的类型和路由方式的改变而改变…

龙哥量化:deepseek写技术指标,deepseek写选股公式,通达信deepseek写公式太牛了

龙哥微信:Long622889代写通达信技术指标、选股公式(通达信,同花顺,东方财富,大智慧,文华,博易,飞狐)代写期货量化策略(TB交易开拓者,文华8,金字塔) 2025的deepseek火出天际了,用来写技术指标,量化策略岂不是爽歪歪,哈哈 先说使用体验, 第一:写代码确实很强,…

这个记录一下,困扰了很久,usb网卡被隐藏。

这个问题困扰了很久,直到今天用了这个搜索。才发现问题,照做之后,usb网卡回来了。终于笔记本不用在连网线了,只连typtc扩展坞就可以了。没想到禁用之后,还被隐藏!!! 解决的链接。 https://blog.csdn.net/ljason1993/article/details/85884992

docker中提示permission denied

docker中使用mount命令报错:mount: permission denied使用docker exec -it dokcerID bash进入docker容器中,显示的是root,权限应该是足够,但是使用mount命令一直提示permission denie,很明显是权限不足造成的查看docker历史版本文档,发现docker在0.6之后引入了privileged…

使用Chainlit快速构建一个对话式人工智能应用体验DeepSeek-R1

Chainlit是一个开源的 Python 包,用于构建可用于生产的对话式人工智能。 DeepSeek-R1 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题。在 RL 之前,DeepSeek-R1 引入了冷启动数据,进一步优化了推理性能。它在数学、代码和推理任务中与 OpenAI-o1 表…

Mybatis-plus -2025/1/27

MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率DQL编程控制 // 创建 LambdaQueryWrapper 对象,用于构建查询条件LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();// 1. 等值查询// 添加等于条件,查询 usern…

springboot -2025/1/26

配置文件优先级: application.properties > application.yml > application.yaml YAML格式 YAML(YAML Aint Markup Language),一种数据序列化格式。 优点:容易阅读 yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰容易与脚本语言交互以数据为…