解题心得:
1、所有池在一条直线上,不走回头路
2、任意池都可以作为结束位置,减掉路途中消耗的时间,问题可化简
#!/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)