使用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 ...
随机推荐
- BZOJ 1211 HNOI2004 树的计数 Prufer序列
题目大意:给定一棵树中全部点的度数,求有多少种可能的树 Prufer序列.详细參考[HNOI2008]明明的烦恼 直接乘会爆long long,所以先把每一个数分解质因数.把质因数的次数相加相减.然后 ...
- 【打CF,学算法——三星级】Codeforces Round #313 (Div. 2) C. Gerald's Hexagon
[CF简单介绍] 提交链接:http://codeforces.com/contest/560/problem/C 题面: C. Gerald's Hexagon time limit per tes ...
- WPF使用RoutedCommand自己定义命令
主要代码例如以下所看到的: /// <summary> /// 声明并定义命令. /// </summary> RoutedCommand ClearCommand = new ...
- AntiXSS的作用
XSS跨站脚本攻击 是指用户输入HTML编码对网站进行跨站攻击. 通过使用FCKeditor.FreeTextBox.Rich TextBox.Cute Edito ...
- Mesos初步尝试
记得几年前,用.net做分布式批处理的时候环境搭建很麻烦,虽然参数的分片算法.配置都搞定了,但是.net虚拟机的环境建立是个头疼的事: 节点要自己手工建 环境变量没法从前往后传递 批处理程序改动后的分 ...
- Swift 3.0在集合类数据结构上的一些新变化
一.Array数组的更改 array数组中修改的API示例如下: //创建大量相同元素的数组//创建有10个String类型元素的数组,并且每个元素都为字符串"Hello"//sw ...
- 企业级nosql数据库应用与实战-redis
一.NoSQL简介 1.1 常见的优化思路和方向 1.1.1 MySQL主从读写分离 由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力.读写集中在一个数据库上让数据库不堪重负,大部 ...
- 同时只允许Count个线程访问同一块区域的实现方式
转载请注明出处. 好吧,后来才发现有Semaphore和SemaphoreSlim这两个类. 以前的答案: 最近.Net项目中用到了网页截图功能,这个截图功能是类似后台开了一个IE浏览器默默加载某个网 ...
- lua 实现tableToString
function tableToString(studentNum) local str = "{ " str = str.."\n" for k, v in ...
- 原生JavaScript实现一个简单的todo-list
直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...