炒股 题目难度:中阶 时间限制:2000ms 内存限制:256mb 题目描述 小T最近喜欢上了炒股,但往往卖得不如意。每次卖出股票总会后悔——我该早点卖的!或者是我该晚点卖的! 这次,上天给了他一次机会,让他穿梭回去了x天前,但他最多只能买卖一次股票。非常幸运的是,小T把这x天的股票价格都记录了下来,现在,小T想知道,在他初始资金为v的情况下,他最多能把资金变为多少? 注:股票实行的是t+1交易制度,即当天买入的股票只能在下一天及之后卖出。 输入格式 第一行一个整数n,代表天数。 第二行n个整数xi,代表第i天股票价格。 第三行一个整数v,代表初始资金。 样例输入#1 4 2 5 1 3 4 样例输出#1 12
时间: 2024-04-15 16:32:12 浏览: 55
微信小程序开发:模拟同花顺炒股小程序(源码+图表)
这是一个动态规划问题。我们可以使用一个一维数组 dp 来记录每一天的最大资金变化。假设第 i 天的最大资金变化为 dp[i],那么有以下递推关系:
dp[i] = max(dp[i-1], prices[i] - min_price)
其中,min_price 表示第 i 天之前的最低股票价格。初始情况下,dp[0] = 0,min_price = prices[0]。
根据上述递推关系,我们可以从第 1 天开始遍历,计算每一天的最大资金变化,并更新 min_price。最后返回 dp[n-1] 即可。
下面是一个示例代码实现:
```python
def max_profit(prices, v):
n = len(prices)
dp = [0] * n
min_price = prices[0]
for i in range(1, n):
dp[i] = max(dp[i-1], prices[i] - min_price)
min_price = min(min_price, prices[i])
return dp[n-1] + v
n = int(input())
prices = list(map(int, input().split()))
v = int(input())
result = max_profit(prices, v)
print(result)
```
对于样例输入,运行上述代码会输出 12,符合预期结果。
阅读全文