4.3 逢低吸纳

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,符合预期。

发布了17 篇原创文章 · 获赞 0 · 访问量 469

猜你喜欢

转载自blog.csdn.net/yang_live/article/details/103723396
4.3