• 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;
    }
    
  • 相关阅读:
    myeclipse-9.0安装svn客户端插件
    jquery中lhgdialog插件(一)
    Jquery之ShowLoading遮罩组件
    git 命令
    org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map
    在线压缩图片网址
    如何在知网下载外文文献
    Linux 常见命令
    在VIM 里面编辑和保存
    vi a.sh ABCD
  • 原文地址:https://www.cnblogs.com/dmoransky/p/12380563.html
Copyright © 2020-2023  润新知