首页 > 其他分享 >7663: 股票买卖 动态规划/线性dp

7663: 股票买卖 动态规划/线性dp

时间:2023-04-12 21:12:13浏览次数:33  
标签:股票买卖 int max 阿福 000 b2 7663 dp 利润

描述

 

最近越来越多的人都投身股市,阿福也有点心动了。谨记着“股市有风险,入市需谨慎”,阿福决定先来研究一下简化版的股票买卖问题。

假设阿福已经准确预测出了某只股票在未来N天的价格,他希望买卖两次,使得获得的利润最高。为了计算简单起见,利润的计算方式为卖出的价格减去买入的价格。

同一天可以进行多次买卖。但是在第一次买入之后,必须要先卖出,然后才可以第二次买入。

现在,阿福想知道他最多可以获得多少利润。

 

输入

 

输入的第一行是一个整数T(T≤50),表示一共有T组数据。

接下来的每组数据,第一行是一个整数N(1≤N≤100,000),表示一共有N天。第二行是 N 个被空格分开的整数,表示每天该股票的价格。该股票每天的价格的绝对值均不会超过1,000,000。

 

输出

 

对于每组数据,输出一行。该行包含一个整数,表示阿福能够获得的最大的利润。

 

样例输入

 

3
7
5 14 -2 4 9 3 17
6
6 8 7 4 1 -2
4
18 9 5 2

样例输出

 

28
2
0

状态定义:定义两个数组,l和r

l[i]表示在第i天卖掉股票的最大利润

r[i]表示在第i天买股票的最大利润

状态初始化:全部为0

状态转移方程:l[i]=max(l[i-1],a[i]-buy1);//其中1为第i天之前价格的最低

r[i]=max(r[i-1],buy2-a[i]);//2表示第i天及以后价格的顶峰

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e5+10;
 4 int l[N],r[N],a[N];
 5 //l[i]在第i天卖出股票最大利润
 6 //r[i]在第i天买入股票最大利润 
 7 int b1,b2;
 8 int n;
 9 int main()
10 {
11     int t; cin>>t;
12     while(t--)
13     {
14         cin>>n;
15         memset(l,0,sizeof(l));
16         memset(r,0,sizeof(r));
17         for(int i=1;i<=n;i++)scanf("%d",&a[i]);
18         b1 = a[1]; //最小买入价 
19         b2 = a[n]; //最大卖出价 
20         for(int i=1;i<=n;i++)
21         {
22             l[i] = max(l[i-1],a[i]-b1); //卖出利润:第i天股价a[i]-买入价b1 
23             b1 = min(b1,a[i]);
24         }
25         for(int i=n;i>=1;i--)
26         {//买入利润:卖出价b2-买入价a[i],所以需要从第n天往前看才能知道哪一天的股价a[i]卖出利润大 
27             r[i] = max(r[i+1],b2-a[i]);
28             b2 = max(b2,a[i]);
29         }
30         int sum = 0;
31         for(int i=1;i<=n;i++)
32         {
33             sum = max(sum,l[i]+r[i]); //第i天卖出最大利润+买入时最大利润相加 
34         }
35         if(sum<0)cout<<0<<endl; //负利润不如不买 
36         else cout<<sum<<endl;
37     }
38      return 0;
39 }

 

标签:股票买卖,int,max,阿福,000,b2,7663,dp,利润
From: https://www.cnblogs.com/jyssh/p/17311257.html

相关文章

  • dpt-shell 抽取壳实现原理分析(执行逻辑)
    开源项目位置(为大佬开源精神点赞)https://github.com/luoyesiqiu/dpt-shell抽取壳分为两个步骤加壳逻辑:一对apk进行解析,将codeItem抽出到一个文件中,并进行nop填充二对抽取后的apk进行加密三注入壳程序相关文件即配置信息执行逻辑:一壳程序执行二壳解密......
  • dpt-shell 抽取壳实现原理分析(加壳逻辑)
    开源项目位置(为大佬开源精神点赞)https://github.com/luoyesiqiu/dpt-shell抽取壳分为两个步骤加壳逻辑:一对apk进行解析,将codeItem抽出到一个文件中,并进行nop填充二对抽取后的apk进行加密三注入壳程序相关文件即配置信息执行逻辑:一壳程序执行二壳解密......
  • 给技术新人的ODPS优化建议
    数据开发基本都是从陌生到熟悉,但是写多了就会发现各种好用的工具/函数,也会发现各种坑,本文分享了作者从拿到数据到数据开发到数据监控的一些实操经验。写在前面本文档是组内的一份算法ODPS离线开发分享,仅列出了这些年积累下来的一些重要经验和结论,特别是在算法日常数据处......
  • SPRING ThreadPoolTaskExecutor示例
    0、前言当我们需要实现并发、异步等操作时,通常都会使用到ThreadPoolTaskExecutor。它是springcore包中的,而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。1、示例1.1、配置类importorg.springframework.context.annotation......
  • UVa 103 Stacking Boxes (DP&DAG)
    103-StackingBoxesTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=39BackgroundSomeconceptsinMathematicsandComputerSciencearesimpleinoneortw......
  • UVa 11375 Matches (DP&高精度)
    11375-MatchesTimelimit:2.000secondshttp://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2370Wecanmakedigitswithmatchesasshownbelow:Given N matches,findthenumberofdifferentnumbersrepresentableusing......
  • 以阿里巴巴推荐的使用 ThreadPoolExecutor 构造函数自定义参数的方式来创建线程池
    importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;publicclassThreadPoolExecutorDemo{privatestaticfinalintCORE_POOL_SIZE=5;privatestaticfinalintMAX......
  • 【Java 线程池】【四】ThreadPoolExector中的Worker工作者原理
    1 前言上一节我们看了ThreadPoolExecutor线程池的execute内部方法流程,addWorker方法流程,看到Worker是线程池内部的工作者,每个Worker内部持有一个线程,addWorker方法创建了一个Worker工作者,并且放入HashSet的容器中,那么这节我们就来看看Worker是如何工作的。2  内部属性我们......
  • 博弈论dp
    博弈DP解决的是两人轮流操作,且没有平局的两人博弈游戏,和博弈问题的形式相同。博弈论dp正推会有后效性,这是无法解决的所以一般博弈论dp会选着逆推但实际上逆推也不好写,所以这时候一般会以记忆化搜索dp的形式来写博弈论dp ......
  • 康复训练の树形DP
    所有代码的开头头文件,宏定义和命名空间如下#include<bits/stdc++.h>#defineTptemplate<typenameTy>#defineTstemplate<typenameTy,typename...Ar>#definelllonglong#defineCIconstint#defineRIint#defineWwhile#definegcgetchar#definemax(x,y)......