股票交易(DP+单调队列优化)】的更多相关文章

LINK:股票交易 题目确实不算难 但是坑点挺多 关于初值的处理问题我就wa了两次. 所以来谢罪. 由于在手中的邮票的数量存在限制 且每次买入卖出也有限制. 必然要多开一维来存每天的邮票数量. 那么容易想到\(f_{i,j}\)表示到了第\(i\)天有\(j\)张邮票的最大赚钱值. 每次需要间隔W天进行操作 W变成W+1 那么在第i天能够转移的是 \(0~i-W\)这个区间了. 枚举前面哪一天 买入卖出k张邮票 就可以得到\(n^2m^2\)的做法. 容易想到我们只需要\(i-W\)这个地方的值…
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the sequence into several parts every one of which is a consecutive subsequence of the original sequence. Every part must satisfy that the sum of the intege…
传送门 单调队列优化dp好题. 有一个很明显的状态设置是f[i][j]表示前i天完剩下了j分股票的最优值. 显然f[i][j]可以从f[i-w-1][k]转移过来. 方程很好推啊. 对于j<kj<kj<k和j>kj>kj>k的情况我们分别对第二维建立单调队列转移. 代码: #include<bits/stdc++.h> #define N 2005 using namespace std; inline int read(){ int ans=0; char…
题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股. 另外,股票交易所还制定了两个规定.为了避免大家疯狂交易,股票交易所规定在两次交易(某一天的买入或者卖出均算是一…
题目链接 首先这题可以肯定的是朴素DP秒出.然后单调队列优化因为没接触过所以不会emmm 而且脑补没补出来 坐等四月省选倒数第一emmm 心态爆炸,偷懒放题解链接 #include<cstdio> #include<cstring> #include<cctype> #include<cstdlib> #include<algorithm> #define maxn 2020 #define INF 0x7fffffff using namesp…
题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股. 另外,股票交易所还制定了两个规定.为了避免大家疯狂交易,股票交易所规定在两次交易(某一天的买入或者卖出均算是一…
股票交易 $ solution: $ 这道题以前就写了,题目很好,但自己没有发题解,来补一篇: 首先,题目出得很有迷惑性,但我们不难想到状态要设天数,和自己手上的股票数目(因为这两个就是充要信息).而我们转移也比较常规,跟着题意模拟就行: (不买不卖): $ f[i][j]=f[i-1][j] $ (买入): $ f[i][j]=max{~\sum_{p=1}^{p<i} \sum_{q=0}^{q<j} f[p][q]-(j-q)\times AP[i]~} $ (卖出): $ f[i][j…
题目链接 BZOJ1855 题解 设\(f[i][j]\)表示第\(i\)天结束时拥有\(j\)张股票时的最大收益 若\(i \le W\),显然在这之前不可能有交易 \[f[i][j] = max\{f[i - 1][j],-ap[i] * j\} \quad [j \le as[i]]\] 否则,就有三种选择: ①购买 \[f[i][j] = max\{f[i - W - 1][k] - ap[i] * (j - k)\} \quad[k \le j][j - k \le as[i]]\]…
这道题吗= =首先解决了我多年以来对仙人掌图的疑问,原来这种高大上的东西原来是这个啊= = 然后,看到这种题,首先必须的就是缩点= = 缩点完之后呢,变成在树上找最长路了= =直接树形dp了 那么那些环呢,就是一个环形dp了,可以先把它拆成一条链,然后注意到最长路径=max(f[i]+f[j]-dist(i,j))  拆成链的话dist(i,j)=i-j 然后就发现dist(i,j)有单调性,就可以用单调队列优化了= = 这样写就可以a了= = ps1:今天发现有人给我留言了真开心QAQ 感觉自…
题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000,O(n^3)的DP不适用.需要加个单调队列优化. 注意每次是从$[i-k,i)$区间,选择加上ai.每次清空双向队列. #include <queue> #include <cstdio> #include <cstring> #include <iostream&g…