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\n", ans);
return 0;
}
AcWing 332. 股票交易的更多相关文章
- 贪心 CF 332 C 好题 赞
题目链接: http://codeforces.com/problemset/problem/332/C 题目意思: 有n个命令,要通过p个,某主席要在通过的p个中选择k个接受. 每个任务有两个值ai ...
- 最多两次股票交易-Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- 【BZOJ1855】股票交易(动态规划,单调队列)
[BZOJ1855]股票交易(动态规划,单调队列) 题面 BZOJ 题解 很显然,状态之和天数以及当天剩余的股票数有关 设\(f[i][j]\)表示第\(i\)天进行了交易,剩余股票数为\(j\)的最 ...
- [SCOI2010]股票交易
题目大意: 网址:https://www.luogu.org/problemnew/show/P2569 大意:在接下来的T天中,每天股票有一个买入价格Api与卖出价格Bpi. 同时,每天买入股票数与 ...
- 腾讯机试题 AcWing 603 打怪兽
题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...
- <我的股票交易知识汇总与个人感悟_v1.0 (By geman)>
书在这里 一个完整的股票交易包括选股.买股.持股.卖股四个阶段. 右侧交易,顶是跌出来的,底是涨出来的 一定要敢于止损,设好止损位,严格执行,即使踏空也无怨无悔:资金安全第一位 坚持只买处于上升通道的 ...
- AcWing 143. 最大异或对
https://www.acwing.com/problem/content/145 #include <iostream> #include <algorithm> usin ...
- 1855: [Scoi2010]股票交易[单调队列优化DP]
1855: [Scoi2010]股票交易 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1083 Solved: 519[Submit][Status] ...
- 【BZOJ1855】[Scoi2010]股票交易 DP+单调队列
[BZOJ1855][Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预 ...
随机推荐
- TCP中RTT的测量和RTO的计算
https://blog.csdn.net/zhangskd/article/details/7196707 tcp传输往返时间是指:发送方发送tcp断开时, 到发送方接收到改段立即响应的所耗费的时间 ...
- JsonPath在接口自动化中的应用
我理解jsonpath于json而言,就像是xpath在XML中的作用.用来确定json中某部分数据的语言.我更喜欢叫jsonpath表达式,因为这样好像是数学问题. 以前和小伙伴一起写接口自动化的时 ...
- laravel5.5 如何创建Facades并使用
laravel Facades概念略,自行百度. 如何创建Facades使用步骤1. 创建一个php文件,App\Utils\SmsSend.php.<?php namespace App\Ut ...
- Python_网络编程_socket()
什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. 详细资 ...
- C# 9.0新特性详解系列之一:只初始化设置器(init only setter)
1.背景与动机 自C#1.0版本以来,我们要定义一个不可变数据类型的基本做法就是:先声明字段为readonly,再声明只包含get访问器的属性.例子如下: struct Point { public ...
- kubernetes个人笔记(一)
一.证书工具 CFSSL keytools,openssl 1.介绍 CFSSL is CloudFlare's PKI/TLS swiss army knife. It is both a comm ...
- 运维自动化之11 - 自动化部署之jenkins及简介
https://www.cnblogs.com/jimmy-xuli/p/9020825.html
- 类虚拟机软件CrossOver是什么?它的优势在哪里?
虚拟机软件对于很多人来说已经不是一个陌生的词汇了.我们可以通过软件来模拟具有完整硬件系统功能的计算机系统.比如我们可以在Mac OS系统上模拟Windows 7 的系统,以此来安装我们想要使用的应用程 ...
- K8ssandra——专为Kubernetes云原生数据而生
DataStax最近发布了K8ssandra--一个开源的.部署于Kubernetes上的Apache Cassandra全新发行版本.K8ssandra一站式集合了在Kubernetes上部署开源版 ...
- 装饰模式(Decorator Pattern)
代理模式:动态地给一个对象添加一些额外的职责,它比生成子类方式更为灵活. 优点:在某些时候装饰模式比继承(inheritance)要更加灵活 装饰模式的组成 (1)抽象组件:定义一个抽象接口,来规范准 ...