AcWing 332. 股票交易

Posted dmoransky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 332. 股票交易相关的知识,希望对你有一定的参考价值。

大型补档计划

题目链接

(f[i][j]) 表示前 (i) 天,手里有 (j) 个股票挣得最多钱

买股票。枚举 (u < i - W)

(f[i][j] = max(f[u][k] - (j - k) * AP[i]) = max(f[u][k] + k * AP[i]) - j * AP[i])

满足 (j - AS[i] <= k < j)

(pre[k])(f[1 ~ i - W][k]) 的前缀 (Max) 维护即可。

剩下的用单调队列。

维护 (pre[k] - k * AP[i]) 递减的序列即可。

卖股票(P),枚举 (u < i - W, j < k <= BS[i] + j)

(f[i][j] = f[u][k] + (k - j) * BP[i] = max(f[u][k] + k * BP[i]) - j * BP[i])

维护 (pre[k] + k * AP[i]) 递减的序列即可。

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N = 2005; 
int T, maxP, W, AP[N], BP[N], AS[N], BS[N];
int f[N][N], pre[N], q[N];

int main() {
    int ans = 0;
    memset(f, 0xcf, sizeof f);
    memset(pre, 0xcf, sizeof pre);
    pre[0] = 0;
    scanf("%d%d%d", &T, &maxP, &W);
    for (int i = 1; i <= T; i++) scanf("%d%d%d%d", AP + i, BP + i, AS + i, BS + i);
    for (int i = 1; i <= T; i++) {
        int hh = 0, tt = 0;
        q[0] = 0;
        for (int j = 1; j <= maxP; j++) {
            while (hh <= tt && q[hh] < j - AS[i]) hh++;
            if (hh <= tt) f[i][j] = pre[q[hh]] + q[hh] * AP[i] - j * AP[i];
            while (hh <= tt && pre[q[tt]] + q[tt] * AP[i] <= pre[j] + j * AP[i]) tt--;
            q[++tt] = j;
        }
        hh = 0, tt = 0;
        q[0] = maxP;
        for (int j = maxP - 1; ~j; j--) {
            while (hh <= tt && q[hh] > BS[i] + j) hh++;
            if (hh <= tt) f[i][j] = max(f[i][j], pre[q[hh]] + q[hh] * BP[i] - j * BP[i]) ;
            while (hh <= tt && pre[q[tt]] + q[tt] * BP[i] <= pre[j] + j * BP[i]) tt--;
            q[++tt] = j;
        }
        for (int j = 0; j <= maxP; j++) {
            if (i - W >= 1) pre[j] = max(pre[j], f[i - W][j]);
            ans = max(ans, f[i][j]);
        }
    }
    printf("%d
", ans);
    return 0;
}

以上是关于AcWing 332. 股票交易的主要内容,如果未能解决你的问题,请参考以下文章

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

面试翻车之——股票专题(贪心+状态机dp)

面试翻车之——股票专题(贪心+状态机dp)

量化交易中,如何快速把股票代码转换成Int整形?

量化交易中,如何快速把股票代码转换成Int整形?

量化交易中,如何快速把股票代码转换成Int整形?