您的位置:首页 > 编程语言 > Python开发

贪心算法之钓鱼问题(python实现)

2018-11-19 20:11 134 查看

解题心得:

1、所有池在一条直线上,不走回头路

2、任意池都可以作为结束位置,减掉路途中消耗的时间,问题可化简

[code]#!/usr/bin/env python
import sys

def  getMaxpool(pool):
maxpool = index = 0
poolen = len(pool)
for i in range(poolen):
if(maxpool<pool[i]):
maxpool = pool[i]
index = i
return index

def stringTransform(string, n):
list = string.split()[0:n]
for i in range(n):
list[i] = int(list[i])
return list

if __name__ == "__main__":
pool = []
n = input("请输入pool数: ")
n = int(n)
fishtime = int(input("请输入钓鱼的小时数: "))
if fishtime <= 0:
sys.exit("输入错误!!时间必须大于0!!")
else:
times = fishtime * 60/5

pool = stringTransform(input("请输入每个池第一个五分钟钓鱼数(n个整数):"), n)
if len(pool) < n:
sys.exit("输入错误,输入数量小于池数!!")

decreasefish = stringTransform(input("请输入湖泊再钓鱼每5分钟的鱼量减小值(n个整数):"), n)
if len(decreasefish)    < n:
sys.exit("输入错误,输入数量小于池数!!")

walktime = stringTransform(input("请输入相邻两个池间行走时间(n-1个整数): "), n-1)
if len(walktime) < n-1:
sys.exit("输入错误,输入数量小于池数减1!!")

i = j = 0
maxfish = 0
for i in range(n):                                      ##钓鱼结束位置
fish = 0
fishpools = pool[0:i+1]                           ##以i为终点的pool集合
t = times
print(fishpools)
for j in range(i):
t -= walktime[j]                                ##去掉所有路途中的时间
print("time: %d" % t)
while t > 0:
poolindex = getMaxpool(fishpools)         ##获取钓鱼最大的池
print("poolindex=%d" % poolindex)
if fishpools[poolindex] == 0:
break
else:
fish += fishpools[poolindex]
print(fish)
if fishpools[poolindex] <= decreasefish[poolindex]:
fishpools[poolindex] = 0;
else:
fishpools[poolindex] -= decreasefish[poolindex]     ##刷新可钓鱼数
t -= 1
if maxfish < fish:
maxfish = fish
print("最大钓鱼数为:  %d" % maxfish)

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: