模型:有\(n\)个物品,第\(i\)个物品重量为\(w_i\),价值为\(v_i\)。从中选\(k\)个物品,使得单位重量的价值最大。

sol:
设\(C(x)\)为“是否可以选择\(k\)个物品,使得单位重量的价值不小于\(x\)”。
这个东西显然是关于\(x\)单调的,所以我们二分之。
设选择的集合为\(S\)。
由于
\[x \ge\frac{\sum_{j \in S}{v_i}}{\sum_{j\in S}{w_i}}\]
所以
\[\sum_{j \in S}{(v_i - w_i\times x)} \ge 0\]
所以按照\(key_i = (v_i - w_i\times x)\)的顺序从大到小选取即可,\(C(x)\)就转化为前\(k\)个的\(key_i\)和是否不小于0。

最小化平均值的问题同理解决之。

例题:POJ 2976,3111,3258,3273,3104,3045。

附POJ 3111的程序

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;#define rep(i,a,b) for (int i = a; i <= b; i++)inline int read() {char ch = getchar(); int x = 0;while (ch < '0' || ch > '9') ch = getchar();while (ch > '0' && ch < '9') {x = x*10 + ch - 48;ch = getchar();}return x;}const int N = 100000 + 5;int n, k;struct Data { int id; double v, w, key; } jewel[N];bool cmp(Data A, Data B) { return A.key > B.key; }bool judge(double x) {rep(i,1,n) jewel[i].key = double(jewel[i].v) - x*double(jewel[i].w);sort(jewel+1, jewel+n+1, cmp);double sum = 0;for (int i = 1; i <= k && sum >= 0; i++) sum += jewel[i].key;return (sum >= 0);}int main()
{   while (scanf("%d%d", &n, &k) == 2) {rep(i,1,n) scanf("%lf%lf", &jewel[i].v, &jewel[i].w), jewel[i].id = i;double l = 0.0, r = 1.0 * 0x3f3f3f3f;rep(i,1,100) {double mid = (l + r)/2;if (judge(mid)) l = mid; else r = mid;}rep(i,1,k-1) printf("%d ", jewel[i].id);printf("%d\n", jewel[k].id);}return 0;
}

有一个常数优化的余地:排序的时候不交换整个struct,而是只排序下标。

转载于:https://www.cnblogs.com/yearwhk/p/5904354.html

平均值的最值化 - 二分相关推荐

  1. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。

    图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产 ...

  2. 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)

    文章目录 图像二值化处理 二值化原理 API介绍 手动设置阈值 均值法 迭代法 自动设置阈值 直方图法 全局阈值法 OTSU法 三角形法 自适应阈值法 API 绘制图像直方图 图像二值化处理 二值化原 ...

  3. C#,图像二值化(13)——全局阈值的双峰平均值算法(Bimodal Thresholding)与源程序

    1.图像二值化概述 图像二值化是将彩色图像转换为黑白图像.大多数计算机视觉应用程序将图片转换为二进制表示.图像越是未经处理,计算机就越容易解释其基本特征. 二值化过程 在计算机存储器中,所有文件通常以 ...

  4. 入门图形学:图像二值化

    最近工程做图像处理和网格处理,顺便来记几篇博客.       二值化处理       在图像处理上,一般的图像(彩图)携带信息过多,用于计算处理方面就不适合,需要将图像进行灰度化->二值化.   ...

  5. OpenCV+python:图像二值化

    1,图像二值化概念及方法 一个像素点的颜色是由RGB三个值来表现的,所以一个像素点矩阵对应三个颜色向量矩阵,分别是R矩阵,G矩阵,B矩阵,它们也都是同样大小的矩阵. 在图像处理中,用RGB三个分量(R ...

  6. 二值化网络如何训练?这篇ICML 2021论文给你答案

    视学算法专栏 机器之心编辑部 这篇来自 CMU 和 HKUST 科研团队的 ICML 论文,仅通过调整训练算法,在 ImageNet 数据集上取得了比之前的 SOTA BNN 网络 ReActNet ...

  7. 【OpenCV 4开发详解】图像二值化

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  8. opencv 二值化 python_Python OpenCV 图像二值化-阈值分割

    1.二值化处理 # 手动二值化处理 # 设置阈值大小 threshold thresh = 125 # 设置超过阈值像素值的最大值 maxval = 255 # THRESH_BINARY:超过阈值为 ...

  9. 二值化图像的欧拉数_Android OpenCV(八):图像二值化

    图像二值化 简介 图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程.在数字图像处理中,二值图像占有非常重要的 ...

  10. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

最新文章

  1. Lync Server 2010的部署系列(三) lync批量导入用户联系人
  2. java fx 插件,JAVA FX 應用程序基礎
  3. java进阶之注解篇
  4. 比java好的_Java Spring真的比直接进行Java编程好吗
  5. php异步轮询如何实现,深入剖析JavaScript异步之事件轮询
  6. 论文浅尝 | 打通推荐系统与知识图谱: 第一个公开的大规模链接数据集合
  7. Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式
  8. mysql5.7空间运算_msyql5.7数据类型和运算符
  9. 安居客Android项目架构演进
  10. increase-memory-limit 解决 项目运行内存不足(JS stack trace)
  11. Android jdwp 自动断开,android – 安装调试器有时会导致应用程序崩溃
  12. 五笔字根表识别码图_五笔字根表图
  13. 线性系统的状态空间分析和综合
  14. 乒乓球比赛赛程_2020乒乓球比赛赛程表
  15. Spring Boot进阶(09):集成EasyPoi,实现Excel文件多sheet导入导出,你得会 | 保姆级教学,超级详细,建议收藏
  16. 计算机视觉基础知识复习
  17. Google play developer谷歌开发者注册和使用中的常见问题和解决方案
  18. java 横版游戏开发_用MyEclipse的Java Project开发仿DNF横版格斗游戏
  19. 2021语言与智能技术竞赛:机器阅读理解任务 实验报告
  20. DAMA-CDGA认证-第11章数据仓库和商务智能

热门文章

  1. Markdown语法(二)——链接代码块
  2. 软件工程大学大三课表_专业选修课 | 面向大二、大三同学的专业选修课全面介绍来啦!...
  3. There is insufficient memory for the Java Runtime Environment to continue.
  4. js处理web页面滚动条
  5. 2018第17周总结
  6. putty远程连接以及密钥
  7. 防止重复点击提交,仅提交一次的终极绝杀技[高清、有码]
  8. 无所不在的性能测试——《LoadRunner 没有告诉你的》之五
  9. 一点Python学习资源
  10. cocoaPods 创建自己的依赖库