[洛谷]P2240 【深基12.例1】部分背包问题

P2240 【深基12.例1】部分背包问题【贪心】 题目描述 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100)N(N \le 100)N(N≤100) 堆金币,第 iii 堆金币的总重量和总价值分别是 mi,vi(1≤mi,vi≤100)m_i,v_i(1\le m_i,v_i \le 100)mi​,vi​(1≤mi​,vi​≤100)。阿里巴巴有一个承重量为 T(T≤1000)T(T \le 1000)T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比 阅读详情

题目描述

阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v_i(1\le m_i,v_i \le 100)mi​,vi​(1≤mi​,vi​≤100)。阿里巴巴有一个承重量为 T(T \le 1000)T(T≤1000) 的背包,但并没办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?

输入格式

第一行两个整数 N、T
接下来 N 行,每行两个整数 m_i,v_imi​,vi​

输出格式

一个整数表示答案,输出两位小数

输入输出样例

输入 #1复制

4 50
10 60
20 100
30 120
15 45

输出 #1复制

240.00

【思路】

因为金币可以任意分割,我们不用担心因为背包的体积, 放入一个背包后, 无法放入其他背包。

步骤如下, 我们根据每组背包的总价值和体积,计算出每组背包的单位价格。并按照单位价格排序。

然后优先放入单位价值高的金币。直到背包容量为空为止。(因为背包可以分割,所以,如果背包剩余空间放不下一组的话,可以把这一组的金币分开存放。)

【代码】

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Good {
    int w, v;
    double p;
    bool operator<(const Good & a) const {
        return p > a.p;
    }
};
const int  N = 105;
Good a[N];
int n, t;
double res;
int main() {
    cin >> n >> t;
    for(int i = 0 ;i < n; i++) {
        scanf("%d%d", &a[i].w, &a[i].v);
        a[i].p = double(a[i].v) / a[i].w;
    }
    sort(a, a + n);
    for(int i = 0 ;i < n; i++) {
        if(t > a[i].w) {
            res += a[i].v;
            t -= a[i].w;
        } else {
            res += t * a[i].p;
            break;
        }
    }
    printf("%.2lf", res);
    return 0;
}

 

洛谷P2240 【深基12.例1】部分背包问题 题解 非常简单的一道贪心题,本苟蒻也是很轻易地一遍过(因为忽略了数据精度,所以第一遍0分,哈哈哈) 没有什么多余的操作,开一个结构体数组,将单价最高的排在前面,然后遍历判断即可。 下面是AC代码: #include<bits/stdc++.h> //万能头 using namespace std; int main(void) { struct Q //定义一个结构体数组 { double sl; double zj; double dj; 阅读详情

相关推荐

题解:洛谷 P2240 【深基12.例1】部分背包问题

的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。阿里巴巴走进了装满宝藏的藏宝洞。堆金币的总重量和总价值分别是。一个实数表示答案,输出两位小数。阿里巴巴有一个承重量为。#普及-# #贪心#

团爸讲算法 675

P2240 【深基12.例1】部分背包问题

阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有NN≤100堆金币,第i堆金币的总重量和总价值分别是mi​vi​1≤mi​vi​≤100。阿里巴巴有一个承重量为TT≤1000的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?

na208702973的博客 998

Ollama+FAISS+Embedding+Rerank+LLM 详细部署指南

下载安装Ollama 双击运行安装程序 安装完成后会自动启动服务 修改默认安装路径(避免C盘爆满) 或使用PowerShell: 验证安装 Linux系统部署: (二)准备模型 1. 拉取Embedding模型 2. 拉取LLM模型 注意:原文中提到的可能需要从自定义仓库拉取: 3. 下载Rerank模型 (三)安装依赖库 创建项目目录和虚拟环境: 二、主要功能实现 项目结构 (一)配置文件(config/config.yaml) (二)文本分块策略实现 创建 : (三)文档读取

AI技术改变世界 1580

部分背包问题(c++题解)

藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v_i(1\le m_i,v_i \le 100)mi​,vi​(1≤mi​,vi​≤100)。阿里巴巴有一个承重量为 T(T \le 1000)T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。接下来 NN 行,每行两个整数 m_i,v_imi​,vi​。

hb_zhyu的博客 841

poincare截点

poincare映射定义比较抽象,简单理解就是每个原始周期取一个点,表现在程序中的思路如下: 以激励的周期T0为poincare的原始周期,设置1个周期取m个点,取N个周期设置T0/m为ode45的步长,每个周期的 i*m个点处取一个点(i=0.0-1.0),把这些点画出来就行了。有几个点就是几倍周期。 (注意:ode45算法是变步长的算法,所以一定要之前自己设置步长,我在这个地方吃了很大一个亏...

小树 3008

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5424

贪心算法之——部分背包问题

对了,贪心算法还有一类部分背包问题也挺经典: 下面以洛谷p2240为例,https://www.luogu.com.cn/problem/P2240 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 mi,vi(1<=mi,vi<=100)。阿里巴巴有一个承重量为 T(T \le 1000)T(T...

qq_45013822的博客 3901

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2286

P1090 合并果子

P1090 合并果子 题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1 次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并...

胡小涛的博客 295

C#上位机实战:PLC与检测设备无缝对接,构建产品质量实时判定系统

本文分享了基于C#开发的汽车零部件质量检测系统实现经验。系统采用三层架构:设备层(PLC/视觉相机/三坐标)、通信层(OPC UA/SDK/串口)和应用层(数据采集/判定/存储)。重点解决了三大技术难点:1)通过OPC UA订阅模式将PLC通信延迟从500ms降至50ms;2)反编译厂商Demo破解视觉SDK对接难题;3)采用时间戳+产品ID实现多设备数据同步。系统上线后质检人员减少67%,误判率降至0.5%,数据追溯效率显著提升。文章强调工业场景下稳定性优先于技术复杂度,实用经验值得借鉴。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 799

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Python/JS/C/C++ 2024 C卷 200分)

二进制表示:任何数 n 的二进制表示中,要找到下一个有相同数量的1的数,我们需要在最低位的0后面的最低位的1进行操作。右侧交换法则:找到右侧的第一个0,位于第一个1的左边,将这个0变成1(提升这个位),并将这个1变成0(下移这个位)。调整尾部1:为了得到最小的数,将所有低于已交换的1的位重置,使得所有1尽可能靠右。

学Java,找哪吒 1162

【题解】【洛谷P2240】【贪心】——【深基12.例1】部分背包问题

贪心算法(greedy algorithm,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键在于贪心策略的选择。这是百度对贪心的解释。想要使用贪心算法,必须具备无后效性的特征。这点可以在之后的做题中体现出来。局部最优解是什么呢?顾名思义,就是某种情况下的最优解。贪心策略,即对问题求解的策略(方法),这两个概念现在看有点晦涩难懂,需要在后续的做题中加深理解。

Pantheraonca的博客 1107

【AI技术赋能有限元分析应用实践】Abaqus有限元分析与深度学习结合20个案例与有限元分析数据来源方法说明

结合 Abaqus 和深度学习,数据的获取和处理是关键的一步。通过从仿真、实验、公开数据库或合成数据中获取数据,经过预处理后,可以将其用于训练深度学习模型。最终,将训练好的深度学习模型与 Abaqus 集成,用于材料行为预测、结构优化、非线性分析、损伤预测等任务,从而提升仿真效率和精度。

源代码杀手的博客 3213

洛谷 P2240 [深基12.例1] 部分背包问题 题解 贪心

贪心 排序 新手向 洛谷题解 C++代码 附详细注释

一只摸鱼的bbc 1252

AttributeError: module ‘numpy‘ has no attribute ‘int‘解决方案

本文主要介绍了AttributeError: module ‘numpy’ has no attribute 'int’解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 28万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

贪心:P2240 【深基12.例1】部分背包问题(洛谷)

贪心算法的讲解: (https://blog.csdn.net/Africa_South/article/details/87924966?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159347169019195188431759%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159347169019195188431759&amp

bossmmm的博客 416

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

P2240 【深基12.例1】部分背包问题(洛谷)

原题传送门 思路:先定义三个数组存储每一堆金币的价值,重量,性价比,然后用冒泡排序按性价比从大到小排序,最后将性价比大的先与背包的重量比较(此处就是贪心的思想,局部优解到全局优解),再分两种情况讨论,最后输出带走金币的价值即可 代码参考 在这里插入代码片 ...

Bertil的博客 768

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

洛谷 P2240 【深基12.例1】部分背包问题

阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100) 堆金币,第 i 堆金币的总重量和总价值分别是 mi​,vi​(1≤mi​,vi​≤100)。阿里巴巴有一个承重量为 T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?

2501_92739945的博客 491

洛谷:P2240 【深基12.例1】部分背包问题

藏宝洞里面有 N(N≤100) 堆金币,第 i 堆金币的总重量和总价值分别是 mi​,vi​(1≤mi​,vi​≤100)。阿里巴巴有一个承重量为 T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?//引入value代表其每份金币的具体价值,实际上就是总价除重量得出单价的意思,请读者自行体会。接下来 N 行,每行两个整数 mi​,vi​。

2503_94758394的博客 292

洛谷-P2240 【深基12.例1】部分背包问题

题目链接 题意: 有一个固定承受重量的背包和一堆具有重量和价值的可分割物品,求最多能装多少价值的物品。 思路: 一道非常明显的贪心题(不知道为啥题目带背包),我们只需要将性价比最高的物品优先装入背包中即可。 代码: #include<bits/stdc++.h> using namespace std; #define int long long #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N

ACkingdom的博客 375

洛谷P2240 【深基12.例1】部分背包问题

洛谷P2240 【深基12.例1】部分背包问题

weixin_43708800的博客 246

01背包(洛谷P2240 【深基12.例1】部分背包问题)

01背包(P2240 【深基12.例1】部分背包问题) 题目描述 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100)N(N \le 100)N(N≤100) 堆金币,第 i 堆金币的总重量和总价值分别是 mi,vi(1≤mi,vi≤100)。阿里巴巴有一个承重量为 T(T≤1000)T(T \le 1000)T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多

ltyzz的博客 532

【洛谷】P2240 【深基12.例1】部分背包问题

详细注释,小白嘎嘎冲

m0_74969835的博客 392

洛谷 P2240 【深基12.例1】部分背包问题 python解析

python贪心策略,,,,

m0_61775106的博客 368
上一篇: [leetcode]1390. 四因数
下一篇: 【洛谷】P1803 凌乱的yyy / 线段覆盖
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值