当前位置: 代码迷 >> 综合 >> OpenJudge 8464 股票买卖
  详细解决方案

OpenJudge 8464 股票买卖

热度:34   发布时间:2023-12-06 08:23:32.0

题目:股票买卖


思路:

可能是这个题(UVA 11078)的升级版……

就是正反跑两次这个算法,再求最大值。


代码:

#include<bits/stdc++.h>
using namespace std;#define inf (1<<30)
#define maxn 100000int n;
int a[maxn+5];
int f[maxn+5],g[maxn+5];int dp(){int Min=inf,Max=-inf;for(int i=1;i<=n;i++){Min=min(a[i],Min);f[i]=max(f[i-1],a[i]-Min);}for(int i=n;i>=1;i--){Max=max(a[i],Max);g[i]=max(g[i+1],Max-a[i]);}int s=0;for(int i=1;i<=n;i++){s=max(s,f[i]+g[i]);
//		printf("%d   %d %d\n",i,f[i],g[i]);}return s;
}int main() {int T;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}memset(f,0,sizeof(f));memset(g,0,sizeof(g));int ans=dp();printf("%d\n",ans);}return 0;
}