使用Python实现贪心算法
题目:
圣诞节来临了,在城市A中,圣诞老人准备分发糖果。现在有多箱不同的糖果,每一种糖果都有自己的价值和重量。每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿最多只能承受一定重量的糖果。请问圣诞老人最多能带走多大价值的糖果。
输入数据:
输入的第一行由两个部分组成,分别为糖果箱数正整数n(1<=n<=100),驯鹿能承受的最大重量正整数w(0<w<10000);其余n行每行对应一箱糖果,由两部分正整数v和w组成,分别为一箱糖果的价值和重量。
输出要求:
输出圣诞老人能带走的糖果的最大总价值,保留一位小数,输出为一行。
输出样例:
4 15
100 4
412 8
266 7
591 2
输出样例:
1193.0
注:此处并没有按照这样的格式进行输入。
#coding:utf-8
from __future__ import division input_a = raw_input(u'箱数:')
input_b = raw_input(u'最大承受重量:') list_c = []
list_z = [] for i in range(1,int(input_a)+1):
input_c = raw_input('第'+str(i)+'箱的总价值:')
input_d = raw_input('第'+str(i)+'箱的重量:')
avg = round(int(input_c)/int(input_d),1)#每一箱,重量为1的价值
list_c.append(avg)#添加到列表,用于之后做比较
list_z.append([int(input_d),avg,0])#此处列表中添加列表,中间的列表一个存放总重量,第二个存放单位价值,第三个存放是否该物品已被取走 list_c.sort(reverse=True) # 降序排序
sum =[0,0]# 用于存放取走的总重量,第一个参数是取走的重量,第二个是超出前的备份
1 num =0
ji = 0 for i in range(len(list_c)):
for k in range(len(list_z)):
if ji == 0:#做是否超出马车最大承受量的标记,未超出为0
if (list_c[i] == list_z[k][1]) and (list_z[k][2]==0):
sum[1] = sum[0]#备份
sum[0] = sum[0] + list_z[k][0]#取走的重量
2 v = list_z[k][0]#取走的重量
if sum[0] > int(input_b):#如果所有取走的重量超出马车的重量,就依次减少一单元的重量
ji = 1#超出为1
t= list_z[k][0]
while True:#依次减去单位1的重量
z = sum[1] + t#使用备份进行判断,此时取走的数量已经大于最大承受量了
if z <= int(input_b):
break
t = t-1
v=t#等于最大承受量时,价值较大的一件物品应取走的数量
3 sum[0]=sum[1]#从备份恢复
sum[0] = sum[0] + t#此时为真正的取走数量
num = list_c[i]*v + num#总价值
list_z[k][2] = 1#取走的标记
print u'能带走的糖果的最大价值为:',num
实现的效果图:
此处用两组数据进行测试:
第一组数据:
第二组数据:
如果各位大佬有更好的方法,欢迎以下评论区说下,如果有什么不懂得,也同样欢迎评论区发表疑问。谢谢!
使用Python实现贪心算法的更多相关文章
- python数据结构与算法第十六天【贪心算法与动态规划】
对于一个字符串,对字符串进行分割,分割后的每个子字符串都为回文串,求解所有可行的方案 这个问题可以使用贪心算法与动态规划来求解 步骤如下: (1)先得出所有的单个字符的回文串,单个字符必定是回文串, ...
- 正則表達式re中的贪心算法和非贪心算法 在python中的应用
之前写了一篇有关正則表達式的文章.主要是介绍了正則表達式中通配符 转义字符 字符集 选择符和子模式 可选项和反复子模式 字符串的開始和结尾 ,有兴趣的能够查看博客内容. 此文章主要内容将要介绍re中的 ...
- python常用算法(6)——贪心算法,欧几里得算法
1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...
- python正则表达式01--贪心算法和非贪心算法findall()
import re st = 'asdfasxxixxdafqewxxlovexxsadawexxyouxxas' # . #点匹配除换行符外的任意字符 a0 = re.findall('xx.',s ...
- 剑指offer-动态规划-贪心算法--剪绳子-python
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...
- 贪心算法(Greedy Algorithm)
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...
- 算法导论----贪心算法,删除k个数,使剩下的数字最小
先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
随机推荐
- COM-IE-(2)
# -*- coding:UTF-8 -*- import sys from time import sleep import win32com.client from win32com.client ...
- 关于Mac终端故障一直出现 [进程已完毕]
终端已打开就出现以下信息.无法输入不论什么的命令 Last login: Mon Aug 18 10:00:36 on ttys000 [进程已完毕] 原因:不知谁改动了 终端->偏好设置-&g ...
- .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言
12月23日,由开源中国联合中国电子技术标准化研究院主办的2017源创会年终盛典在北京万豪酒店顺利举行.在本次大会上,链家集团技术副总裁.PHP 开发组核心成员鸟哥发表了以 " PHP Ne ...
- Vue深度学习(6)- 组件
使用组件 在Vue中,可以用 Vue.extend() 创建一个组件构造器: var MyComponent = Vue.extend({ template:'..........' //选项 }) ...
- 《跟我学IDEA》三、实用配置(行号、提示、代码等)
上一篇博文我们介绍了idea如何配置一个maven,git,tomcat等,这一篇我们来进行一些常用设置,这些也正是idea可爱之处,大大提高了开发的效率. 第一节:idea常用配置显示行数.显示方法 ...
- JavaSe:代码块执行顺序
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. //普通代码块:在方法或语句中出现 ...
- springboot整合redis
springboot-整合redis springboot学习笔记-4 整合Druid数据源和使用@Cache简化redis配置 一.整合Druid数据源 Druid是一个关系型数据库连接池,是阿 ...
- 关于postgres中的一些宏的tips
Postgresql作为C语言开发的代码,其中大量的运用了一些宏的操作. 因此理解这些宏很重要,然而有时候这些宏总让人很费解. 作为一个经常翻翻postgresql源码的小白,在这里做一个记录吧,方便 ...
- 在jQuery中使用canvas时遇到的问题
正常的情况下一般在JavaScript中使用canvas,会用到如下代码: var canvas=document.getElementById("canvas"); var co ...
- 【ANT】使用ANT自动执行JMeter用例
1.把\apache-jmeter-3.1\extras目录下的build.xml和jmeter-results-detail-report_21.xsl两个文件拷贝到用例所在目录: 2.修改用例名称 ...