小咪买东西 分数规划

简介: 小咪买东西 分数规划

小咪是一个土豪手办狂魔,这次他去了一家店,发现了好多好多(n个)手办,但他是一个很怪的人,每次只想买k个手办,而且他要让他花的每一分钱都物超所值,即:买下来的东西的总价值/总花费=max。请你来看看,他会买哪些东西吧。

分数规划,二分答案
有 n 个物品,有属性值 ai,bi要求选出至多 k 个物品,使得sum(ai) / sum(bi)尽可能大。
我们要首先二分答案 x,若 sum(ai) / sum(bi) ≥x 则说明答案可以更大。
稍微变形一下:sum(a[i]) >= sum(b[i]) * x;
继续:sum(a[i] - b[i] * x) >= 0
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5;
typedef long long ll;
ll a[maxn], b[maxn], c[maxn];
int n, k;
bool cmp(ll a, ll b) {
    return a > b;
}
int check(int x) {
    for (int i = 1; i <= n; i++) {
        c[i] = b[i] - a[i] * x;
    }
    sort (c + 1, c + n + 1, cmp);
    ll ans = 0;
    for (int i = 1; i <= k; i++) { //取最大的k个
        ans += c[i];
    }
    return ans >= 0; //判断 sum(b[i] - a[i] * x) >=0 -> 答案l = mid + 1  else r = mid - 1
}
int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n >> k;
        int l = 0, r = 10000;
        for (int i = 1; i <= n; i++) {
            cin >> a[i] >> b[i];;
        }
        while (l <= r) { //二分答案
            int mid = (l + r) / 2;
            if (check(mid)) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        cout << l - 1 << endl;
    }
    return 0;
}
相关文章
|
4天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
328 102
|
4天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
5天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
197 110
|
5天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
230 132