【洛谷_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--... 阅读详情

相关推荐

Aurora8b10b光口通信实战:复位时序与IP核配置详解

本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。

weixin_29280219的博客 177

P2569 [SCOI2010]股票交易

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

Gxyhqzt的博客 463

当知识图谱遇见多模态:突破文本界限的智能认知革命

本文探讨了知识图谱与多模态技术的融合,揭示了其在医疗诊断、文化保护等领域的革命性应用。通过图神经网络、对比学习框架和跨模态注意力机制等技术,实现了文本、图像和音频数据的智能关联与认知。文章还分享了在Neo4j等图数据库中的实践案例和优化策略,为构建下一代智能认知系统提供了技术参考。

weixin_29197835的博客 464

[周末训练]股票交易

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

MachineryCountry的博客 359

深度学习入门:使用CMSIS-NN在微控制器上部署模型的完整指南与Python Jupyter实践

CMSIS-NN是ARM为Cortex-M系列微控制器设计的神经网络库。它旨在提供一套高效、轻量级的神经网络API,使得开发者可以在资源受限的微控制器上运行深度学习模型。CMSIS-NN优化了各种常见的神经网络层,如卷积层、全连接层等,确保它们在微控制器上的运行效率。# 定义模型])# 编译模型# 训练模型这样,我们就得到了一个简单的手写数字识别模型。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧,请下载完整项目。

m0_57781768的博客 5884

分组背包问题(MCKP)三大算法对比:贪心、Dyer-Zemel和动态规划谁更强?

本文深入对比了分组背包问题(MCKP)的三大主流算法:贪心算法、Dyer-Zemel算法和动态规划。通过分析各自的原理、实现及性能表现,揭示了贪心算法速度快但非最优,动态规划精确但受限于规模,而Dyer-Zemel算法则在效率与最优性间取得了最佳平衡,是解决中等至大规模MCKP问题的首选方案。

vscode6remote的博客 226

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

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

qq_37321744的博客 422

Linux DRM驱动实战:手把手教你用drmModeSetCrtc显示纯色画面(附完整代码)

本文提供了一份完整的Linux DRM驱动实战指南,手把手教你使用drmModeSetCrtc在屏幕上显示纯色画面。文章详细解析了从打开设备、获取资源、创建帧缓冲区到最终提交画面的完整调用流程,并附带了可直接编译运行的完整代码示例,帮助开发者快速上手Linux图形底层开发。

weixin_29216353的博客 512

洛谷P2569 [SCOI2010] 股票交易

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

ding_ding_tang的博客 1704

小程序设计中的区块链应用:数字藏品实现

本文旨在为开发者提供在小程序中实现区块链数字藏品功能的完整技术方案。区块链与数字藏品的基础概念智能合约的设计与实现小程序与区块链的交互方式数字藏品的完整实现流程文章将从基础概念入手,逐步深入到技术实现层面,最后通过完整项目案例展示数字藏品在小程序中的实现方式。每个技术点都会配合代码示例和架构图进行说明。区块链:一种分布式数据库技术,通过加密算法保证数据不可篡改数字藏品:基于区块链技术的数字资产,具有唯一性和可验证性NFT。

小程序开发 1351

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

m0_51579041的博客 1万+

洛谷 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

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

Coding... 2852

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

OIer_Cosmos的博客 717

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

洛谷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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

洛谷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、付费专栏及课程。

余额充值