1.实验目的
动态规划算法解决炒股问题
2.实验内容
2.1 问题描述
“逢低吸纳”是炒股的一条成功秘诀。如果你想成为一个成功的投资者,就要遵守这条秘诀:
"逢低吸纳,越低越买"这句话的意思是:每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。
给定连续的N天中每天的股价。你可以在任何一天购买一次股票,但是购买时的股价一定要比你上次购买时的股价低。写一个程序,求出最多能买几次股票。
以下面这个表为例, 某几天的股价是:
天数 :1 2 3 4 5 6 7 8 9 10 11 12
股价 :68 69 54 64 68 64 70 67 78 62 98 87
2.2 问题分析
这道题是一个求最长下降序列的子过程,假设选择了第i天作为最低买入,那么一定可以找到第i+n天比他的价格更高。同理,也会有第i+n+n天比上一次买入更高,直到找不到更高的。把最高的列入序列,递归逐步向前寻找,可得到最长下降子序列。
3.实验过程及结果
3.1 数据输入
按书中给出的数据,分别输入天数与对应的股票价格
#todo:数据输入
def dataget():
#n = int(input("请输入加满油后可行驶公里数:"))
m = int(input("请输入天数:"))
a = []
for i in range(1,m+1):
dis = int(input("请输入第{}天的股价:".format(i)))
a.append(dis)
return a
返回值是a是一个列表,记录每一天的股价
3.2 实验代码
#todo:计算天数
def getday(a):
N = len(a)
M = [1] * N
for i in range(N-1):
for j in range(0, i + 1):
if a[i + 1] < a[j]:
M[i + 1] = max(M[i + 1], M[j] + 1)
return max(M)
a = dataget()
print("最大买入天数:",getday(a))
最长下降子序列计算序列长度,M用于记录买入天数,从最高的开始找,每找到一个更低的价格,M则加1.返回值是天数。
3.3 实验结果
最大买入天数是4,符合预期。