zoukankan      html  css  js  c++  java
  • 贪心-圣诞老人的礼物

    题目:圣诞老人的礼物Santa Clau’s Gifts
    圣诞节来临了,圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果
    有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人
    的驯鹿雪橇最多只能装下重量 W 的糖果,请问圣诞老人最多能带走多大
    价值的糖果。
    输入:第一行由两个部分组成,分别为糖果箱数正整数n(1 <=n <= 100) 100),
    驯鹿能承受的最大重量正整数 w 0 < w <10000 ),两个数用空格隔开。
    其余 n 行每行对应一箱糖果,由两部分组成,分别为一箱糖果的价值正整数v和重
    量正整数 w ,中间用空格隔开。
    输出:输出圣诞老人能带走的糖果的最大总价值,保留1位小数。
    样例输入
    4 15
    100 4
    412 8
    266 7
    591 2
    样例输出
    1193.0

    思路:因为每箱糖果都可以拆分成任意散装组合带走,因此可以利用贪心算法的思想实现。
    按礼物的价值重量比从大到小依次选取礼物,对选取的礼物尽可能多地装,直到达到总重量w
    价值重量比 = 价值/重量,求得1个单位重量下其价值
    贪心算法:每一步行动总是按某种指标选取最优的操作来进行,该指标只看眼前,
    并不考虑以后可能造成的影响。
    “圣诞老人礼物”题,若糖果只能整箱拿,则贪心法错误。

    python代码:
     1 def main():
     2     boxes_list = []
     3     # n-箱数,w-承受最大重量
     4     n, w = map(int, input().split())
     5     for i in range(n):
     6         temp = list(map(int, input().split()))
     7         value_rate = temp[0]/temp[1]
     8         temp.append(value_rate)
     9         boxes_list.append(temp)
    10     # [[591, 2, 295.5], [412, 8, 51.5], [266, 7, 38.0], [100, 4, 25.0]]
    11     boxes_list = sorted(boxes_list, key=lambda x: x[2], reverse=True)
    12     # 总重量、总价值
    13     totalW, totalV = 0, 0.0
    14     for i in range(n):
    15         if totalW + boxes_list[i][1] <= w:
    16             totalW += boxes_list[i][1]
    17             totalV += boxes_list[i][0]
    18         else:
    19             # boxes_list[i][2]i物品单个重量的价值
    20             totalV += (w - totalW)*boxes_list[i][2]
    21             break
    22     print("圣诞老人能带走的糖果的最大总价值为:%.1f" % totalV)
    23 
    24 
    25 if __name__ == '__main__':
    26     main()
     
  • 相关阅读:
    dataTables分页实现两个前提
    centos 7 下 nginx 1.10.3 编译安装的方法
    redis 远程连接出错的解决办法
    Yii2事件驱动的运行机制
    Yii2项目高级模版 三个模块在同一个目录下的重定向配置
    PHP处理上传文件信息数组中的文件类型 正确获取
    PHP is_writeable 存在bug , 写一个自定函数 判断文件是否可写
    PHP面试题学习
    解决yii2 禁用layout时AppAsset不加载资源的问题
    如何在 Docker 容器中运行 Kali Linux 2.0
  • 原文地址:https://www.cnblogs.com/an-wl/p/13401752.html
Copyright © 2011-2022 走看看