当前位置: 首页 > news >正文

《P2569 [SCOI2010] 股票交易》

题目描述

最近 lxhgww 又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。

通过一段时间的观察,lxhgww 预测到了未来 T 天内某只股票的走势,第 i 天的股票买入价为每股 APi​,第 i 天的股票卖出价为每股 BPi​(数据保证对于每个 i,都有 APi​≥BPi​),但是每天不能无限制地交易,于是股票交易所规定第 i 天的一次买入至多只能购买 ASi​ 股,一次卖出至多只能卖出 BSi​ 股。

另外,股票交易所还制定了两个规定。为了避免大家疯狂交易,股票交易所规定在两次交易(某一天的买入或者卖出均算是一次交易)之间,至少要间隔 W 天,也就是说如果在第 i 天发生了交易,那么从第 i+1 天到第 i+W 天,均不能发生交易。同时,为了避免垄断,股票交易所还规定在任何时间,一个人的手里的股票数不能超过 MaxP。

在第 1 天之前,lxhgww 手里有一大笔钱(可以认为钱的数目无限),但是没有任何股票,当然,T 天以后,lxhgww 想要赚到最多的钱,聪明的程序员们,你们能帮助他吗?

输入格式

输入数据第一行包括 3 个整数,分别是 T,MaxP,W。

接下来 T 行,第 i 行代表第 i−1 天的股票走势,每行 4 个整数,分别表示 APi​, BPi​, ASi​, BSi​。

输出格式

输出数据为一行,包括 1 个数字,表示 lxhgww 能赚到的最多的钱数。

输入输出样例

输入 #1复制

5 2 0 2 1 1 1 2 1 1 1 3 2 1 1 4 3 1 1 5 4 1 1

输出 #1复制

3

说明/提示

  • 对于 30% 的数据,0≤W<T≤50,1≤MaxP≤50;
  • 对于 50% 的数据,0≤W<T≤2000,1≤MaxP≤50;
  • 对于 100% 的数据,0≤W<T≤2000,1≤MaxP≤2000;
  • 对于所有的数据,1≤BPi​≤APi​≤1000,1≤ASi​,BSi​≤MaxP。

代码实现:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<deque> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define ri register int #define il inline #define mp make_pair #define pi pair<int,int> #define mem0(x) memset((x),0,sizeof (x)) #define mem1(x) memset((x),0x3f,sizeof (x)) #define int ll il char gc() { static const int BS = 1 << 22; static unsigned char buf[BS], *st, *ed; if (st == ed) ed = buf + fread(st = buf, 1, BS, stdin); return st == ed ? EOF : *st++; } #define gc getchar template<class T>void in(T &x) { x = 0; bool f = 0; char c = gc(); while (c < '0' || c > '9') {if (c == '-') f = 1; c = gc();} while (isdigit(c)) {x = (x << 3) + (x << 1) + (c ^ 48); c = gc();} if (f) x = -x; } #undef gc void out(int x) { if (x < 0) putchar('-'), x = -x; if (x > 9) out(x / 10); putchar(x % 10 + '0'); } #define N 2010 #define f dp int n, mx, w; int a[N], b[N], as[N], bs[N]; int dp[N][N]; deque<int>q; signed main() { in(n), in(mx), in(w); for (ri i = 1; i <= n; ++i) { in(a[i]), in(b[i]), in(as[i]), in(bs[i]); } memset(dp, 0xcf, sizeof dp); for (ri i = 1; i <= n; ++i) { dp[i][0] = 0; for (ri j = 0; j <= as[i]; ++j) dp[i][j] = -a[i] * j; for (ri j = mx; j >= 0; --j) dp[i][j] = max(dp[i][j], dp[i - 1][j]); if (i - w - 1 >= 0) { q.clear(); for (ri j = 0, ba; j <= mx; ++j) { while (!q.empty() && j - q.front() > as[i]) q.pop_front(); while (!q.empty() && f[i - w - 1][ba = q.back()] + ba * a[i] <= f[i - w - 1][j] + j * a[i]) q.pop_back(); q.push_back(j); f[i][j] = max(f[i][j], f[i - w - 1][ba = q.front()] - (j - ba) * a[i]); } q.clear(); for (ri j = mx, ba; j >= 0; --j) { while (!q.empty() && q.front() - j > bs[i]) q.pop_front(); while (!q.empty() && f[i - w - 1][ba = q.back()] + ba * b[i] <= f[i - w - 1][j] + j * b[i]) q.pop_back(); q.push_back(j); f[i][j] = max(f[i][j], f[i - w - 1][ba = q.front()] + (ba - j) * b[i]); } } } printf("%lld", f[n][0]); return 0; }
http://www.jsqmd.com/news/409212/

相关文章:

  • P7515 [省选联考 2021 A 卷] 矩阵游戏
  • 振石股份在西班牙建风电叶片材料基地,欧洲供应链为何需要它
  • 经典不等式自查
  • 2026最新云南旅游公司品牌top10推荐!云南/本地优质旅游服务商权威榜单发布,实力品牌助力舒心出行 - 十大品牌榜
  • 【报告】西班牙基地的30个月与2.499亿元 振石股份把产能放到欧洲风电供应链周围
  • 2026年广州名表维修推荐评测与排名榜单:当名表需要保养时如何选择可靠服务网点 - 品牌推荐
  • 端到端十年演进
  • 2026年广州名士表手表维修评测推荐:非官方维修点选择指南与网点服务深度分析 - 品牌推荐
  • 编程技能的普及化与社会影响
  • AI时代,AI Agent是什么?
  • 手把手搭建 Adaptive RAG 系统:从向量检索到 Streamlit 前端全流程
  • 爬虫助手|视频批量下载分享
  • 2026年广州美度手表维修推荐评测:非官方维修点排行榜与售后网点选择指南 - 品牌推荐
  • LuckPerms 安装 Paper生存服配置权限组
  • 微信小程序的鲜花商城 鲜花销售私信聊天的设计与实现
  • 2026年广州名士表手表维修评测推荐:非官方维修点选择指南与网点服务深度排名 - 品牌推荐
  • 2026年广州美度手表维修推荐榜单:非官方维修网点服务评测与选择指南 - 品牌推荐
  • 【Kafka进阶篇】Kafka延迟请求处理核心:时间轮算法拆解,比DelayQueue高效10倍
  • 多城高薪机会!大模型 AI 训练师岗位清单:含薪资范围 + 任职要求,总有一款适合你
  • 2026最新云南旅行社品牌top10推荐!本地优质服务商权威榜单发布,覆盖昆明/云南全境出行需求 - 十大品牌榜
  • 2026年广州美度手表维修推荐评测:非官方维修点榜单与售后网点服务指南 - 品牌推荐
  • 2026年广州名表维修推荐评测与排名:当高端腕表遭遇保养难题时如何选择可靠服务网点 - 品牌推荐
  • 2026年广州罗杰杜彼手表维修推荐评测:非官方维修网点服务与售后中心选择指南 - 品牌推荐
  • 从零开始构建RAG问答系统:让大模型基于你的知识库回答问题(收藏版)
  • 2026年广州名表维修推荐评测与排名:非官方维修点选择避坑指南 - 品牌推荐
  • 2026年广州罗杰杜彼手表维修网点推荐评测:非官方维修中心的服务与售后深度分析 - 品牌推荐
  • 微信小程序的社区论坛与二手交易平台的设计与实现
  • 大数据领域数据科学的质量控制与评估
  • Windows下编译OpenSCAD
  • AI Agent自主权调节:从全自主到全手动,找到最佳平衡点(收藏必备)