贪心算法——物品可拆分情况求背包最大价值问题

描述

圣诞节来临了,在城市A中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿最多只能承受一定重量的糖果,请问圣诞老人最多能带走多大价值的糖果。

输入

第一行由两个部分组成,分别为糖果箱数正整数n(1 <= n <= 100),驯鹿能承受的最大重量正整数w(0 < w < 10000),两个数用空格隔开。其余n行每行对应一箱糖果,由两部分组成,分别为一箱糖果的价值正整数v和重量正整数w,中间用空格隔开。

输出

输出圣诞老人能带走的糖果的最大总价值,保留1位小数。输出为一行,以换行符结束。

样例输入

4 15
100 4
412 8
266 7
591 2

样例输出

1193.0

题目分析:

本题由于要求装入尽可能多的糖果,因此首先想到的就是用贪心的思想解决

解题思路:

因为此题物品可以拆分,所以将单位重量的价值 按照从高到低排序,每次从单位重量的价值最高的开始装入背包,直到背包装满,此时的价值即为最大价值。

实现代码 :

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
struct gift{int value;int weight;double density;
}gf[101];
bool cmp(gift f1,gift f2){  //按照单重价值从大到小排序return f1.density > f2.density;
}
int main(){int n,w;cin>>n>>w;for(int i=0;i<n;i++){cin>>gf[i].value>>gf[i].weight;gf[i].density=1.0*gf[i].value/gf[i].weight;}sort(gf,gf+n,cmp);double totw=0,totv =0; //注意到w为int型,可拆分为double型//所以新建一个double型保存背包剩余重量for(int i=0;i<n;i++){if(totw + gf[i].weight<=w){totw+=gf[i].weight;totv+=gf[i].value;}else{totv+=gf[i].density *(w-totw);totw = w;break;}}printf("%.1lf",totv);return 0;
}

贪心算法—圣诞老人的礼物(POJ 4110)相关推荐

  1. 贪心算法 圣诞老人的礼物

    贪心选择是每次都要收录单位重量价值最大的礼物 #include <iostream> #include <stdio.h> #include <memory.h> ...

  2. 贪心题目——圣诞老人的礼物

    例题 圣诞老人的礼物 分发糖果,多箱不同的糖果,每箱有自己的价值和重量,每箱都可以拆分成任意散装组合带走,但是雪橇只能装下W重量的糖果,请问圣诞老人最多能敌啊走多大价值的糖果. 输入: 1⃣️n (箱 ...

  3. 贪心算法—建立雷达(POJ 1328)

    贪心算法--区间选点问题 这也是贪心算法的经典问题,一般情况为:有n个闭区间[ai,bj],取尽量少的点,使得每个区间内都至少有一个点. 分析 如果区间i内已经有一个点被取到,则称此区间已经被满足. ...

  4. 信息学奥赛第十节 —— 贪心算法(渡河问题POJ 1700 Crossing River + 拦截导弹的系统数量求解)

    复习概念 贪心算法又叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,贪心算法不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解. 无后效性:贪心算法不是对所有问题都 ...

  5. 简单贪心问题-圣诞老人的礼物

    1.题目描述: 圣诞老人要给每家每户从不同的礼物,但是圣诞老人的车只能承载一定的重量.请问圣诞老人该怎样装载礼物才能使得整车的总价值最大. 2.解题思路: 看其每个礼物的性价比,谁的性价比最大,则谁先 ...

  6. Poj百练 4110:圣诞老人的礼物-Santa Clau’s Gifts (分类:贪心)

    解法: 按礼物的价值/重量比从大到小依次选取礼物,对选 取的礼物尽可能多地装,直到达到总重量w 复杂度: O(nlogn) #include<cstdio> #include<alg ...

  7. Poj 圣诞老人的礼物 贪心

    圣诞节?快乐^ - ^ POJ 4110 圣诞老人的礼物(贪心) 描述 圣诞节来临了,在城市A中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合 ...

  8. 贪心算法之圣诞老人的礼物

    问题描述 圣诞节来临了,中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走,圣诞老人的寻路雪橇最多只能装下重量W的糖果,请问圣诞老人最多能带 ...

  9. 基础算法——贪心算法(圣诞老人的礼物)

    题目是这样的: 圣诞节来临了,中圣诞老人准备分发糖果现在有多箱不同的糖果, 每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走.圣诞老人的驯鹿雪橇最多只能装下重量W的糖果,请问圣诞老人最 ...

最新文章

  1. python中使用squarify包可视化treemap图:使用treemap图可视化个人或者集体的股票、基金的持仓结构(treemap with squarify package)
  2. python tcp服务器_Python 创建TCP服务器的方法
  3. 【小代码讲解】独热编码(One-Hot编码)
  4. 关于商品分类 商品表和属性表的设计
  5. hadoop异常 java.io.IOException: Job status not available
  6. 汇编试验四:[bx] 和 loop 的使用
  7. 3D Slicer Programmatically Set Slice Offset and Intersections 用代码修改Slicer中的切片偏移和交叉点显示...
  8. linux5 iso镜像下载,Redhat Linux5.4/5.5/5.8/6.0/6.3 ISO镜像文件下载
  9. python爬虫实现hdu自动交题
  10. Word2vec And Doc2vec - 文本向量化
  11. 华为强推996工作制,程序员们的变态加班何时休?
  12. 东方财富一面、二面总结(二面凉)
  13. Bootstrap(10) 进度条媒体对象和 Well 组件
  14. 又发现一个免费网盘分享给大家
  15. UI设计师常用的开发工具
  16. 百度IFE前端学院-DAY1-Web开发概览
  17. oracle荣誉acd_Oracle函数
  18. 未能加载文件或程序集 Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken= 1cee9f8bde3db106或它的某
  19. 上海东华计算机分数线,2020年东华大学上海分专业录取分数线
  20. 基于Unity的C#中各类函数使用方法及示例

热门文章

  1. 日日行,不怕千万里;常常做,不怕千万事
  2. 区块链和加密货币产业_区块链:不仅仅用于加密货币
  3. 2017 开源软件排行_2017年开源大会精选
  4. 开源 非开源_开源周中的女性
  5. 前端:JS/18/JS运算符(算术运算符,赋值运算符,字符串运算符,比较运算符,逻辑运算符,三元运算符),window.prompt()
  6. HTTP1.0 、 HTTP1.1、HTTP2.0的主要区别
  7. HTML autocomplete
  8. Java是有法_Java基础语法
  9. mysql sillyr x.so_mysql2.so:libmysqlclient_r.so.15:无法打开共享对象文件:没有这样的文件或目录...
  10. android中返回刷新,Android intent 传递对象以及返回刷新