博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0/1 分数规划
阅读量:7051 次
发布时间:2019-06-28

本文共 925 字,大约阅读时间需要 3 分钟。

模型:

给定整数 \(v_i, c_i\),规定 \(x_i=0\)\(1\),存在一组解 \(\{x_i\}\),使得 \(\displaystyle \frac{\sum_{i=1}^{n} v_ix_i}{\sum_{i=1}^{n} c_ix_i}\) 最大。

解法:

最大化 \(\displaystyle \frac{v_i}{c_i}\)(即性价比)的贪心方法不可行。

\(\displaystyle \frac{\sum_{i=1}^{n} v_ix_i}{\sum_{i=1}^{n} c_ix_i}\ge R\) 变式为 \(\sum_{i=1}^{n} (v_i-R\cdot c_i)x_i\ge 0\)

二分答案 \(R\),对于 \(R(\text{mid})\),计算 \(\sum_{i=1}^{n} (v_i-R\cdot c_i)x_i\) 的最大值,若最大值非负,令 \(l=\text{mid}\) (\(R\) 偏小),否则 \(r=\text{mid}\) (\(R\) 偏大)。

代码:

(ssoj2388 coffee)

#include 
#include
#define db double#define eps 1e-5using namespace std;int n, m;struct node { int w, c; db r; bool operator < (const node& A) const {return r>A.r; }} G[203];int main() { scanf("%d%d", &n, &m); for (int i=1; i<=n; ++i) scanf("%d", &G[i].w); for (int i=1; i<=n; ++i) scanf("%d", &G[i].c); db l=0.0, r=1000.0; while (l+eps

转载于:https://www.cnblogs.com/greyqz/p/10662401.html

你可能感兴趣的文章
干货 | 机器学习没有你想的那么复杂
查看>>
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 16 章 从源代码安装_16.1. 简单版
查看>>
springMVC的事务不回滚
查看>>
WPF与缓动(三) 指数缓动
查看>>
UPS电源和EPS电源的主要区别
查看>>
Hadoop数据目录迁移
查看>>
Mockplus原型交互跟我做之1 - 30秒做一个自动消失的消息框(Toast)
查看>>
房价数据转换和清洗
查看>>
工业互联网公司寄云科技完成近亿元B轮融资,达晨创投领投
查看>>
springboot 详解 (二) crud
查看>>
从旅行箱到旅行美学品牌,ITO获数千万A轮融资
查看>>
Ant Design 3.16.0 发布,企业级 UI 设计语言
查看>>
less学习-混合
查看>>
Fast特征点的寻找和提取
查看>>
SpringBoot抛出ContextPath must start with xx and not end with xx异常
查看>>
JDK11新特性解读
查看>>
用JAVA写一个冒泡排序
查看>>
【网络新功能】NAT网关和弹性公网IP一键组合购买,开通效率提升一倍
查看>>
03.设计模式-单例模式
查看>>
轻松搞定RabbitMQ1:RabbitMQ与AMQP协议简介
查看>>