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预 ...
随机推荐
- linux 信号 ctrl + d z c fg bg 作用
ctrl+c:前台进程终止 后台进程的终止: 方法一:通过jobs命令查看job号(假设为num),然后执行kill %num $ kill %1 方法二:通过ps命令查看job的进程号(PID, ...
- 极客mysql01
1.MySQL的框架有几个组件, 各是什么作用?连接器:负责跟客户端建立连接.获取权限.维持和管理连接.查询缓存:查询请求先访问缓存(key 是查询的语句,value 是查询的结果).命中直接返回.不 ...
- 线程范围内的环境变量---ThreadLocal
package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.util.Random; p ...
- brctl 增加桥接网卡
前言 之前有一篇介绍配置桥接网卡的,这个桥接网卡一般是手动做虚拟化的时候会用到,通过修改网卡的配置文件的方式会改变环境的原有的配置,而很多情况,我只是简单的用一下,并且尽量不要把网络搞断了,万一有问题 ...
- 记最近一次ceph故障修复
前言 所谓吃一堑长一智,每次面对问题才是最好的学习机会,在面对问题的时候,尽量是能够自己去解决,或者去尝试能够最接近答案,确实无法解决再去寻求他人帮助,这样成长的会更快一些,在学校读书做题的时候,老师 ...
- 一个List按照某个size分割为多个小的List
针对于List的size比较大,使用多线程处理任务时,可以将List分割为一个一个比较小的任务单元进行处理. 例如集合大小:645,按照100分割,会将集合分割为6个size为100的集合和一个siz ...
- webug第五关:一个优点小小的特殊的注入
第五关:一个优点小小的特殊的注入 既然是头部注入,首先想到xff注入 出现数据库报错,而且他是直接将xff后的内容带入数据库查询
- ServerLess之云函数实践-天气API
关注我的个人博客,发掘更多的内容 ServerLess之云函数实践-天气API 前言 云计算是大势所趋 Serverless 架构即"⽆服务器"架构,它是一种全新的架构方式,是云计 ...
- dsu on tree (树上启发式合并) 详解
一直都没出过算法详解,昨天心血来潮想写一篇,于是 dsu on tree 它来了 1.前置技能 1.链式前向星(vector 建图) 2.dfs 建树 3.剖分轻重链,轻重儿子 重儿子 一个结点的所有 ...
- SRX_Test_2_sound
声音(sound) [问题描述] 雅礼中学的校门口在修建地铁,而由此带来的噪音问题让周边的居民困扰不已.环保局正在研究 一项评估模型,可以定量评价噪音的危害程度.这项评估模型是这样的:将每一条街道视作 ...