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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值