博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
No.49-LeetCode188 - 动态规划-K次股票最大收益-很难
阅读量:4059 次
发布时间:2019-05-25

本文共 877 字,大约阅读时间需要 2 分钟。

O(N^3) dp通用解法,会超时:

很多类似区间dp可以采用这个模版。

int maxProfit(int k, vector
& prices) { int N = prices.size(); int K = min(k,N/2); int mx[N+1][N+1]; int mn[N+1][N+1]; int one[N+1][N+1]; int dp[K+1][N+1]; memset(mx,0,sizeof(mx)); memset(mn,0,sizeof(mn)); memset(one,0,sizeof(one)); memset(dp,0,sizeof(dp)); for(int i=0;i
=0;i--){ for(int j=i+1;j
=0;l--){ for(int r=l;r

对于股票比较特殊,有特殊处理方法:

初始手里面价格为0,

当买入时,相当于花费prices价格,
卖出时,相当于挣得prices价格。
这样处理的好处是状态可以叠加。
处于一个股票点时,后面股票走势的收益是固定的。
所以,当前股票点价格最高,那么最后得到的结果也是最优的。
所以,一道看似区间dp,实际上只是一道普通dp。

如果只能买卖一次,只需要维护一个值,来代表手中的最大价格。

遍历每个股票点,最后得到的就是利润。

如果可以买卖k次,只需要维护k个值,来代表k次交易后手中最大价格。

int maxProfit(int k, vector
& prices) { int n = prices.size(); k = min(k,n/2); int f[k+1],g[k+1]; memset(f,0,sizeof(f)); memset(g,0xc0,sizeof(g)); for(int i=0;i

转载地址:http://wiwji.baihongyu.com/

你可能感兴趣的文章
linux 驱动开发 头文件
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
自定义 select 下拉框 多选插件
查看>>