洛谷 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) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比 阅读详情

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

题目描述

阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N ( N ≤ 100 ) N(N \le 100) N(N≤100) 堆金币,第 i i i 堆金币的总重量和总价值分别是 m i , v i ( 1 ≤ m i , v i ≤ 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 , T N,T N,T。

接下来 N N N 行,每行两个整数 m i , v i m_i,v_i mi​,vi​。

输出格式

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

样例 #1

样例输入 #1

4 50
10 60
20 100
30 120
15 45

样例输出 #1

240.00

原题

洛谷P2240——传送门

代码

#include <bits/stdc++.h>
using namespace std;
#define max_Heap(x) priority_queue<x, vector<x>, less<x>>
#define min_Heap(x) priority_queue<x, vector<x>, greater<x>>
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef pair<long long, long long> PLL;
const double PI = acos(-1);

struct node
{
    double m, v, ratio; // 总重量,总价值,单位价值
};

bool cmp(node a, node b) // 按照单位价值从大到小排序,这样的顺序是满足贪心的
{
    return a.ratio > b.ratio;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    // 本题贪心策略:每次选择当前剩余金币中价值与重量之比最大的那堆,直至将金币拿完或者背包装满
    // 选择 价值/重量 最大的原因:相同重量下,这样的贪心选择可以让拿走的金币价值更高
    int n, t;
    cin >> n >> t;
    vector<node> a(n); // 节点数组,存储每种金币的重量,价值及单位价值
    for (int i = 0; i < n; i++)
    {
        cin >> a[i].m >> a[i].v;
        a[i].ratio = a[i].v / a[i].m;
    }
    sort(a.begin(), a.end(), cmp);
    double ans = 0; // 最多能带走的价值
    for (int i = 0; i < n; i++)
    {
        if (t <= a[i].m) // 背包装完该金币后无剩余,跳出循环
        {
            ans += a[i].ratio * t;
            t = 0;
            break;
        }
        else // 每次维护当前背包剩余大小,即t
        {
            ans += a[i].v;
            t -= a[i].m;
        }
    }
    cout << fixed << setprecision(2) << ans;

    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】部分背包问题

当 j ≥ mi 时,dp[i][j] = max(dp[i-1][j], dp[i-1][j-mi] + vi),表示可以选择装入第 i 堆金币或不装入第 i 堆金币,取两者中的最大值作为最大价值。当 j < mi 时,dp[i][j] = dp[i-1][j],表示当前背包容量无法容纳第 i 堆金币,所以最大价值与前 i-1 堆金币的最大价值相同。首先,我们定义一个二维数组 dp,其中 dp[i][j] 表示在前 i 堆金币中,背包容量为 j 时能够获取的最大价值。一个实数表示答案,输出两位小数。

qq_60794824的博客 543

ArcGIS | 全球新冠肺炎地图数据下载和处理

ArcGIS

thinkpang的博客 2900

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

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

Pantheraonca的博客 1107

Unity学习笔记之【IK反向动力学操作】

反向动力学,简称IK。相较于正向动力学,反向动力学旨在子级对父级产生的影响。使用IK,可以实现根据目标位置或方向来计算并调整角色的关节(骨骼)链,以使角色的末端(如手臂、腿部等)达到预期的位置或取向。通过使用 Unity 的 IK 功能,你可以实现各种复杂的角色动画效果,如角色抓取、足部对齐、手臂跟随等。 2. 将所视的目标物体拖拽绑定 4. 实现效果如下 :移动角色时注释立方体 实现效果如下

m0_47351846的博客 2954

智驾域控制器硬件架构:从接口丛林到算力核心的工程解码

本文深入解析了智驾域控制器硬件架构的设计挑战与工程实践。面对复杂的接口丛林,文章详细探讨了如何高效融合摄像头、雷达等多源传感器数据,并构建以多SOC为核心的强大算力平台。同时,文章强调了电源、时钟、散热等最小系统及车规级可靠性设计的关键作用,为工程师提供了从接口驯服到算力核心协同的完整硬件解码指南。

happy2的博客 482

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

详细注释,小白嘎嘎冲

m0_74969835的博客 392

电机系列(1) - foc最基本原理、clark变换 、park变换、附代码

什么是FOC? FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制 (VC,Vector Control) ,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。 简单来说就是,FOC是一种对无刷电机的驱动控制方法,它可以让我们对无刷电机进行 “像素级” 控制,实现很多传统电机控制方法所无法达到的效果。 因为所谓的“矢量控制”其实就是

nepqiu的博客 7万+

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

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

HEX9CF的技术博客 523

【AI绘图进阶指南】Latent Diffusion Model核心组件解析——从理论到实践

本文深入解析Latent Diffusion Model(LDM)的核心组件,包括Autoencoder、Denoiser和Conditioning Encoder的工作原理及实践应用。通过理论结合代码示例,揭示LDM如何高效处理图像生成任务,并优化AI绘图流程,为开发者提供从理论到实践的进阶指南。

weixin_42628941的博客 386

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

【全网首发】洛谷贪心题解集合

那么,我们就可以利用数组中前m个位置来储存相对应位置接水的人时间之和.这样的话,每次就可以先找m个接水位置中,当前时间之和最短的来装水(即把a[i]加到a[1](当前总用时最短的位置)),就OK啦!左手数字为a[i]和a[i+1],右手数字为b[i]和b[i+1]。两人的金币数为w[i]和w[i+1]。不难看出,在这个相邻的二元组中,前面的数不受后面的影响,而后面的金币数决定于w[i],a[i],b[i]。那么 w[i+1]=P[i-1]*a[i]/b[i+1]=w[i]*a[i]*b[i]/b[i+1]

喷火龙廖的博客 2041

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4234

贪心: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

两组相机(或三维点)对齐方法介绍及实现代码(求解相似变换,包含旋转R、平移t、尺度s)

  这个变换用于将生成的稀疏重建场景对齐到真值上。由于SfM(Structure from Motion,运动恢复结构)求解的结果是尺度未定的,所以重建场景与真值之间不仅会相差一个旋转与平移,还会存在尺度缩放。待求解的问题可以描述为:已知一组相机(个数为m)的位姿真值Rgt、tgt和预测位姿Rpred、tpred,现要将预测值对齐到真值上。它们之间会相差一个相似变换Msimilarity,包括尺度s、旋转量R、平移量t,可以根据如下步骤进行求解:    1 求解旋转R   首先计算所有m个相机的位姿差异总和

zeeq的博客 3926

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

洛谷 P2240 题解

解决一道贪心问题 (虽然题目叫做背包问题) 心里还是十分喜悦的!!! P2240 【深基12.例1】部分背包问题 #include<iostream> #include<algorithm> //sort(start end [way]) #include<iomanip> //打印小数点几位 //fixed setprecision() using name...

weixin_44271578的博客 855

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

千万不要被题目给误导了,这道题是贪心。 所有金币都可以分开,也就是说只要按照性价比最高的取一定得到的价值最大。 性价比就是这堆金币的价值除以重量。 只需要把这nn堆金币按性价比排序就行了。 然后依次遍历,如果背包中剩余可以拿的重量大于等于这堆金币的重量,就全拿,否则直接装满。 直接装满这里注意一下整型转浮点的细节就好了。 代码如下: #include<cstdio> #include&...

dogcat987的博客 720

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

2503_94758394的博客 292

洛谷P2240 部分背包问题

贪心 洛谷P2240 部分背包问题

2302_80772544的博客 727

【洛谷题解】P2240 部分背包问题

题目概况 题目链接: https://www.luogu.com.cn/problem/P2240 难度: 普及/提高- 题目分析 简化题目: 题目简洁明了 涉及知识点: 贪心算法 解题思路: 不要被题目迷惑,这是一道实打实的贪心。 重点:所有金币都可以随意分割,那么我们考虑计算出每堆金币的单价,按照单价降序排列依次选择,这就是我们的贪心策略。 代码拆解与要点解析 代码简短,看注释。 完整代码 #include <iostream> #include <cstdio> #includ

lovely_cyqの小窝 834

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

python贪心策略,,,,

m0_61775106的博客 368

洛谷P2240(部分背包问题/贪心)题解

S3:用循环将金币逐个放入直到放满,或下一个放不下,或全部金币都放完,并计算总价值。金币的重量和价值,和一个容量为T的背包,最多能装多少金币。S2:求出单价,并排序 单价=总价值/总重量。分析:因为可以随意分割,所以用贪心。思路:贪心原则是选取单价高的放入。题意简述:给定N堆可。

2301_82112620的博客 504

!学习贪心算法!(AC洛谷官方贪心题单)

本文将向小伙伴们介绍何为贪心&&AC洛谷官方贪心题单部分题解会涉及额外知识点||其他方法!/*如果是那种思路就差摆上了的题,作者不会对思路写的很详细……*/

2302_79761709的博客 1427

【算法1-5】贪心

煮啵觉得贪心是一种思维,不是一种模板(虽然有部分题感觉很模板)。煮啵觉得,输出即可。(煮波是蒟蒻,说错莫怪)煮啵写的是洛谷题单,有兴趣可以看看(煮啵是两天写完的,为煮啵骄傲吧,玻璃心求夸哈) 自己点击看题哈,煮啵不喜欢刷字数。

2303_79549479的博客 997
上一篇: 洛谷 P4995 跳跳!题解 贪心
下一篇: 洛谷 T444199 Matrix 题解 分治
bbc_ouo
博客等级 码龄3年 2096粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值