(信息学奥赛一本通 1302 8464)股票买卖#线性动态规划#

本文介绍了一种使用线性动态规划解决信息学奥赛中的股票买卖问题。通过从头和尾分别寻找最大收益组合,并找到一个中间点以最大化总收益,建立状态转移方程进行求解。在代码实现中,使用了最小值和最大值来更新动态规划数组,并最终求得最大收益。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:找出四个数,ai,aj,ak,al。i<=j<=k<=l 并使(aj-ai)+(al-ak)最大。

分析:从头找两个数最大的方案,从尾找两个数最大的方案,再找到一个点求出最大值。

状态转移方程

ans=max(ans,f[i]+g[i]);求出两个和

minx=min(minx,a[i]);//找出最小值

f[i]=max(f[i-1],a[i]-minx);//用最小值求最大值

maxx=max(maxx,a[i]);//找出最大值

g[i]=max(g[i+1],maxx-a[i]);//用最大值求最大值

#include <cstdio>
#include <climits>
#include <cctype>
#include <algorithm>
using namespace std;
int t,a[100001],f[100002],g[100002];
inline int in(){
char x=getchar(); int f=1,go=0;
while (!isdigit(x)&&x!='-') x=getchar();
if (x=='-') f=-f,x=getchar();
while (isdigit(x)) go=go*10+x-48,x=getchar();
return go*f;

int main(){
t=in();
while (t--){
int n,minx=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值