【洛谷_P2569】股票交易

[SCOI2010] 股票交易(单调队列优化DP) 链接:[SCOI2010] 股票交易 题意 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,lxhgww预测到了未来TTT天内某只股票的走势,第iii天的股票买入价为每股APiAP_iAPi​,第iii天的股票卖出价为每股BPiBP_iBPi​(数据保证对于每个iii,都有APi≥BPiAP_i \ge BP_iAPi​≥BPi​),... 阅读详情

股票交易


题目描述

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

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

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

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

输入格式

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

接下来 TT 行,第 ii 行代表第 i-1 天的股票走势,每行 4 个整数,分别表示 AP_i, BP_i, AS_i, BS_i。

输出格式

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

输入输出样例

输入

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

输出

3

解题思路

模拟在每一天中,买股和卖股的情况,动态转移方程为:

f[i][j]=max(max(f[k][j])-j*a[i]);//{j<=as[i],i>w+1}

如果就这么简单的话,那我说这句话有什么意义?我们还要用单调队列维护这里面的最大值,那么程序就出来了:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int e,f[2010][2010],q[100010][3];
int a[2010],b[2010],sa[2010],sb[2010];
int w,t,maxp;

int max(int x,int y)
{
	if(x>y)
		return x;
	return y;
}

int main()
{
	scanf("%d",&e);
	while(e--)
	{
		scanf("%d%d%d",&t,&maxp,&w);
		memset(f,-0x3f3f3f3f,sizeof(f));
		for(int i=1;i<=t;i++)
			scanf("%d%d%d%d",&a[i],&b[i],&sa[i],&sb[i]);
		for(int i=1;i<=w+1;i++)
			for(int j=0;j<=sa[i]&&j<=maxp;j++)
				f[i][j]=-j*a[i];
		for(int i=1;i<=t;i++)
		{
			for(int j=0;j<=maxp;j++)
				f[i][j]=max(f[i][j],f[i-1][j]);
			int hd=1,tl=0;
			if(i<=w+1) continue;
			int s=i-w-1;
			for(int j=0;j<=maxp;j++)
			{
				int sum=f[s][j]+j*a[i];
				while(hd<=tl&&sum>q[tl][2]) tl--;
				q[++tl][1]=j;
				q[tl][2]=sum;
				while(hd<=tl&&j-q[hd][1]>sa[i]) hd++;
				f[i][j]=max(f[i][j],q[hd][2]-j*a[i]);
			}
			hd=1,tl=0;
			for(int j=maxp;j>=0;j--)
			{
				int sum=f[s][j]+j*b[i];
				while(hd<=tl&&sum>q[tl][2]) tl--;
				q[++tl][1]=j;
				q[tl][2]=sum;
				while(hd<=tl&&q[hd][1]-j>sb[i]) hd++;
				f[i][j]=max(f[i][j],q[hd][2]-j*b[i]);
			}
		}
		int ans=0; 
		for(int i=0;i<=maxp;i++)
			ans=max(ans,f[t][i]);
		cout<<ans<<endl;
	}
	return 0;
}
【题解】洛谷P2569[SCOI2010]股票交易 背包问题+单调队列优化 题目链接 学习了大佬题解,这波方程变形后单调队列维护天秀。 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;algorithm&amp;gt; using namespace std; #define _rep(i,a,b) for(int i=(a);i&amp;lt;=(b);i++) #define rep_(i,a,b) for(int i=(a);i&amp;gt;=(b);i--... 阅读详情

相关推荐

从412到200:一步步拆解瑞数6代jsvmp的cookie生成与验证流程

本文深入解析瑞数6代JSVMP的动态安全防护机制,详细拆解从412到200状态的cookie生成与验证流程。通过剖析JSVMP虚拟机核心机制、动态元数据解析及环境检测绕过策略,为逆向工程师提供实用的技术解决方案,帮助突破瑞数6代的高级防御体系。

weixin_30342209的博客 508

P2569 [SCOI2010]股票交易

题目描述最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股。另外,股票交易所还

Gxyhqzt的博客 463

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南

本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。

weixin_28223453的博客 489

[周末训练]股票交易

题目 【内存限制:$512MiB$】【时间限制:$1000ms$】 【标准输入输出】【题目类型:传统】【评测方式:文本比较】 【题目描述】 原题来自:SCOI 2010 最近 $lxhgww$ 又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,$lxhgww$ 预测到了未来 $T$ 天内某只股票的走势,第 ...

MachineryCountry的博客 359

深入解析fio Benchmark测试:从源码到实践

本文深入解析fio Benchmark测试工具,从入门指南到源码架构分析,详细介绍了其核心模块、关键数据结构和I/O处理机制。通过实战案例展示如何优化存储性能测试,包括内存对齐、多线程调优等技巧,帮助开发者充分利用fio进行精准的存储性能评估。

weixin_42563415的博客 208

无需Root!用VirtualXposed+JustTrustMe在安卓高版本上抓包拼多多API数据

本文详细介绍了在安卓高版本设备上无需Root权限即可抓取拼多多API数据的完整方案,通过VirtualXposed与JustTrustMe组合技术,有效绕过SSL Pinning限制。文章涵盖工具准备、环境配置、应用处理及实战分析,特别针对PDD应用的混合通信策略提供了专业解决方案,适合开发者进行竞品分析和数据采集。

weixin_28678151的博客 453

BZOJ1858股票交易 单调队列优化DP

Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出B

qq_37321744的博客 422

Jetson Orin Nano Super开发板实战:视觉模型部署与性能优化指南

本文详细介绍了Jetson Orin Nano Super开发板在边缘AI视觉模型部署与性能优化的完整实战指南。内容涵盖JetPack 6.1环境配置、Docker容器化部署、YOLO11及Transformer模型的TensorRT优化技巧,并通过实测数据展示了性能提升与功耗管理策略,为开发者提供高效的视觉AI部署解决方案。

7h6j5k4l3的博客 1196

洛谷P2569 [SCOI2010] 股票交易

int T,p,w;//T,MaxP,W//单调队列,l为尾,r为头//dp数组。

ding_ding_tang的博客 1704

使用 Simulink 搭建一个地震信号反射系数反演与滤波联合仿真的系统模型

《Simulink地震信号处理仿真指南》摘要:本文详细介绍了使用Simulink进行地震信号反射系数反演与滤波联合仿真的完整流程。从创建模型、生成含噪合成地震记录(包含子波卷积与随机反射系数),到设计滤波模块(带通/小波/自适应滤波)和实现反演算法(Wiener-Hopf方程/RLS方法),最后通过可视化模块分析结果。教程涵盖理论准备、7个实施步骤、优化建议及实际应用场景,为地震勘探、地质调查等领域提供标准化的信号处理仿真方案,特别适合需要掌握地震信号反演与实时滤波技术的工程人员学习。

amy_mhd的博客 114

[SV]SystemVerilog状态机实现案例

本文介绍了SystemVerilog中状态机的实现方法。首先使用枚举类型定义状态(TOP_HIB、TOP_BG、TOP_LDO、TOP_NOR),然后通过三个主要任务实现状态机:1)格式化现态寄存器处理状态转换;2)描述状态转移条件,包括计时器和稳定时间判断;3)基于当前状态和输入信号确定次态。状态机在时钟边沿或复位时更新状态,实现了从休眠到正常工作状态的转换逻辑,包含电源稳定时间检测等关键功能。

元直的博客 2021

洛谷 P2569 [SCOI2010] 股票交易

首先,不难看出,这道题应该用dp的思想,构造出一个,第一维表示天数,第二维表示拥有的股票数量的二维数组,关于状态转移方程,有以下几种情况:1.从本身开始,第i天购买j张票,即:dp[i][j]=-j*AP[i];2.直接继承上一天的数据,即:dp[i][j]=max(dp[i][j],dp[i-1][j]);3.从第i-W-1天购买k张票,即:dp[i][j]=max(dp[i][j],dp[i-W-1][j-k]-k*AP[i])(j-k>0且k<=AS)

ArknightsDoctot的博客 368

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

BZOJ1855: [Scoi2010]股票交易(洛谷P2569)

单调队列 DP BZOJ题目传送门 洛谷题目传送门 设f[i][j]f[i][j]f[i][j]表示前iii天还剩jjj股的最多钱数。有四种转移方式。 1.之前没有股票,直接从这一天开始买,f[i][j]=−j∗APi(j∈[0,ASi])f[i][j]=-j*AP_i\quad(j\in[0,AS_i])f[i][j]=−j∗APi​(j∈[0,ASi​]) 2.这一天啥也不干,f[i][j]=...

forezxl的博客 432

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

洛谷 P2569 [SCOI2010] 股票交易 题解

对于转移时需要求一段区间的最值,注意观察是否符合“滑动窗口”的特性,从而通过单调队列优化DP过程。DP的优化一般有:减少无用状态(降低维数)、减少无用枚举、优化重复的枚举过程等。,需要求最大值的区间长度是固定不变的,并且每次的位移都为。,因此想到了“滑动窗口”,即单调队列优化,复杂度可以降到。天后赚到的利润的最大值(过程中无需考虑资产是否为负)。股股票所赚到的利润最大值,因此需全部初始化为。,因为若到了最后一天还持有股票必然是不优的。首先,复杂度的瓶颈就在于买和卖的时候。观察可以发现,对于第。

OIer_Cosmos的博客 717

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

洛谷P2569[SCOI2010]股票交易题解

题目链接 分析: 令fi,jf_{i,j}fi,j​表示第iii天后拥有jjj张股票时最多能赚的钱数 显然,转移时共有三种情况 1、不做交易 直接由上一天转移: fi,j=fi,jf_{i,j} = f_{i,j}fi,j​=fi,j​ 2、买入 由于每www天才能交易一次,所以应从第i−w−1i - w - 1i−w−1天及以前更新,又第i−w−1i - w - 1i−w−1天前的信息都会更新到...

一只蒟蒻的博客 310

洛谷P2569 [SCOI2010]股票交易

题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi&gt;=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股。 ...

qq_41510496的博客 616

洛谷P2569 股票交易【dp】【单调队列】

题目描述 最近\text{lxhgww}lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,\text{lxhgww}lxhgww预测到了未来TT天内某只股票的走势,第ii天的股票买入价为每股AP_iAPi​,第ii天的股票卖出价为每股BP_iBPi​(数据保证对于每个ii,都有AP_i \geq BP_iAPi...

weixin_30402085的博客 244

洛谷P2569 [SCOI2010]股票交易(单调队列优化DP)

题目链接:P2569 [SCOI2010]股票交易 题解:用dp[i][j]表示第i天结束时拥有j数量股票时的最大收益,对于每天,我们把可以进行的操作分成4类: 1.之前都没有买入股票,今天第一次买入,此时直接计算得出dp[i][j]=-j*AP 2.今天不操作,显然可得状态转移方程dp[i][j]=max(dp[i][j],dp[i-1][j]) 3.在原有股票基础上买入后今天持有j股,那么我们就需要在[1,i-w-1](i-w-1是因为两次操作至少间隔w天)中查找一天作为转移,显然,因为操作2,

m0_56280274的博客 580

洛谷P2569 [SCOI2010]股票交易(单调队列)

传送门 惭愧……这种题目都没看出来…… 首先,我们用$dp[i][j]$表示在第$i$天,手上有$j$股时的最大收益 第一,我们可以直接买股票,即$dp[i][j]=-j*AP_i$,这个直接计算即可 第二,我们可以不操作,那么$dp[i][j]=max(dp[i][j],dp[i-1][j])$ 第三种,我们买股票,那么$dp[i][j]=max(dp[i][j],dp[i-w-...

weixin_30375247的博客 67

【洛谷 P2569&HDU 3401】[SCOI 2010]股票交易【单调队列优化のDP】

题目描述 最近 lxhgww 又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,lxhgww 预测到了未来 T 天内某只股票的走势,第 i 天的股票买入价为每股 AP i ,第 i 天的股票卖出价为每股 BP i (数据保证对于每个 i,都有 AP i ≥BP i ),但是每天不能无限制地交易,于是股票交易所规定第 i 天的一次买入至多只能购买AS i 股,一次卖出至多只能卖出 BS i 股。 另外,股票交易所还制定了两个规定。为了避免大家疯狂交易,股票交易所规

绫 530
上一篇: 【POJ_P2559】Largest Rectangle in a Histogram
下一篇: 【洛谷_CF817D】Imbalanced Array
SSL_GYX
博客等级 码龄7年 103粉丝 297原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值