使用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 ...
随机推荐
- java正则表达式总结
最近工作要使用文件上传解析,上传还好,但是在解析文件的时候,却踩到了好多坑,今天就说说其中的一块吧,正则匹配. 由于上传的文件统一都是csv文件,所以在解析文本的时候,肯定要碰到正则表达式的,先解释一 ...
- 怎样在Spark、Flink应用中使用Protobuf 3的包
如果在在Spark.Flink应用中使用Protobuf 3的包,因为Spark默认使用的是2.5版本的包,提交任务时,可能会报如下异常: com.google.protobuf.CodedInput ...
- free查看内存和swap使用情况,增加、删除、自动挂载swap分区
free [root@localhost ~]# free total used free shared buff/cache available Mem: 999936 142760 566536 ...
- 【java设计模式】【创建模式Creational Pattern】抽象工厂模式Abstract Factory Pattern
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW0AAABvCAIAAACo3AbKAAALvUlEQVR4nO1dUa7cOA7U/c+zwJxkf4
- 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
package com.tn.pattern; public class Client { public static void main(String[] args) { Object[] objs ...
- 深度优先搜索(DFS)——部分和问题
对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
- NP完整性| 集1(简介)
我们一直在写关于高效算法来解决复杂问题,如最短路径,欧拉图,最小生成树等.这些都是算法设计者的成功故事. 在这篇文章中,讨论了计算机科学的失败故事. 计算机可以解决所有的计算问题吗? 存在计算问题,即 ...
- Selinux安全机制
1.Selinux安全机制简介 Selinux是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制.而SELinux则是由美国NSA(国安局)和一些公司(R ...
- Create 命令详解
mkdir:创建一个目录 /mkdir a b c :创建同级目录 /mkdir -p aa/bb/cc: 递归创建目录touch:修改文件时间戳,或者新建一个不存在的文件 /-a 更改存取时间 /m ...
- python学习中的一些“坑”
一.交互列表元素时,需要注意的坑. 例如: array=[4,5,9,8,10,8,4,0,3,4] 最大的值与第一个元素交换,最小的值与最后一个元素交换 # -*- coding: UTF-8 - ...