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

部分背包问题,顾名思义,部分 就是可以取一部分,也就是可以随意拆分的物品,是最简单经典的贪心问题。

解题步骤:

1)用结构体数组保存每个物品的价值及总重量、平均价值;

2)输入数据同时计算每种物品的平均价值;

3)使用自定义的cmp函数以及自带的sort函数将结构体进行排序;

4)循环遍历从最大平均价值开始放入背包,能放肯定是全部放,不能放就放背包剩余重量;

5)最后控制格式输出即可!

题目描述

阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 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,TN,T。

接下来 NN 行,每行两个整数 m_i,v_imi​,vi​。

输出格式

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

输入输出样例

输入 #1

4 50
10 60
20 100
30 120
15 45

输出 #1

240.00

解题代码:

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string>
#include<algorithm>
using namespace std;
struct albb{int m;int v;double avg;
}al[101];
bool cmp(albb a,albb b){return a.avg>b.avg;
}
int main(){int n,t;cin>>n>>t;for(int i=0;i<n;i++){scanf("%d%d",&al[i].m,&al[i].v);al[i].avg = 1.0 * al[i].v/al[i].m;}sort(al,al+n,cmp);double ans,weight=0;for(int i=0;i<n;i++){if(weight + al[i].m <= t){weight += al[i].m;ans += al[i].v;}else{ans += al[i].avg * (t-weight);break;}}printf("%.2lf\n",ans);return 0;
}

贪心算法——部分背包(洛谷 P2240)相关推荐

  1. 洛谷P2240木材加工

    题目链接 洛谷P2240 题目描述 木材厂有 n根原木,现在想把这些木头切割成 k 段长度为l的小段木头(木头有可能有剩余). 当然,我们希望得到的小段木头越长越好,请求出 l的最大值. 木头长度的单 ...

  2. 深入理解 操作系统 SJF算法(以洛谷P1223题为例)

    CPU Scheduling Algorithms 重要的CPU调度算法如下: FCFS Scheduling(First-Come, First-Served) SJF Scheduling(Sho ...

  3. 深入理解 操作系统 LRU算法(以洛谷P1540题为例)

    LRU算法 LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为"最近最少使用",这是操作系统内存管理部分重要的一 ...

  4. 贪心算法 0-1背包c语言,贪心算法0-1背包问题(算法实验代码).pdf

    . 实验三. 0-1 背包问题(贪心算法) 实验代码: #include int max(int a,int b) { if(a>b) return a; else return b; } vo ...

  5. (快速幂算法+高精度)洛谷P1045 麦森数

    前言   故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...

  6. 图论算法——幻象迷宫(洛谷 P1363)

    题目选自洛谷P1363 大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样 然后问你是不是###可以走无限远. ###那么,我们可以很清晰的意识到,如果可以从点(x,y)出发,达到 ...

  7. KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配

    提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...

  8. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)

    题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...

  9. 【P2774】方格取数问题(贪心+最大流,洛谷)

    首先,我们要读懂这道题,否则你会和我一开始产生一样的疑问,把所有的数都取走剩下一个最小的不就可以了么???然后我们发现样例完全不是这么回事.题目中所说的使相邻的两个数没有公共边,是指你去走的数,也就是 ...

最新文章

  1. 黑马程序员 交通灯案例
  2. C指针原理(2)-ATT汇编
  3. 项目复审——Beta阶段
  4. MySQL count()函数
  5. 基于jQuery焦点图片新闻代码(JS+CSS)
  6. cf319.B. Modulo Sum(dp 鸽巢原理 同余模)
  7. 超像素分割算法(SLIC)
  8. 软件著作权申请流程(2021版)
  9. 电脑蓝屏0x0000006B不重装系统的解决办法
  10. 颜色的原理,三基色原理以及HLS(色相、亮度、饱和度)原理
  11. 常规的Git管理流程
  12. AtoZ CSS快速提示:对文本使用OpenType
  13. 【Linux学习笔记】38:有关Linux进程家族树
  14. 基于 STM32 和 NB-IoT 的可穿戴式老人防摔监测系统
  15. JS逆向之补环境过瑞数详解
  16. 没错,我们和美帝的差距就是这么大!
  17. 孔雀优化算法(Peafowl (Pavo Muticus/Cristatus) Optimization Algorithm, POA)
  18. 西门子S7-200PLC的自锁
  19. c语言试卷分析报告范文,c语言试卷分析
  20. 实用Word使用技巧大全

热门文章

  1. 软件测试 学习之路 基本介绍
  2. web前端之css快速入门
  3. raspberry pi_Linux Foundation安全徽章,Raspberry Pi成功,白宫工具等
  4. 前端:常用单词(专业版)
  5. Bootstrap3 行内文本样式
  6. 视觉SLAM十四讲学习笔记-第一讲
  7. 视觉SLAM笔记(6) 坐标系
  8. ROS笔记(4) RoboWare Studio 的安装
  9. python做日历牌_中秋节到了,送你一个Python做的Crossin牌“月饼”
  10. linux mysql 修改密码之后还是不能登录_怎样在Linux下搭建接口自动化测试平台?...