• 至多只能交易两次的股票交易 最大值


     1 #include <algorithm>
     2 #include <iostream>
     3 #include <string.h>
     4 using namespace std;
     5 
     6 const int Maxlen=1e5;
     7 const int INF = 0x3f3f3f;
     8 const int _INF = -0x3f3f3f;
     9 
    10 int main(){
    11     
    12     //局部最优解 和 全局最优解
    13     //定义local[i][j]为到达第i天是最多可进行j次交易且最后一次交易在最后一天的最大利润 为局部最优解
    14     //定义global[i][j]为到达第i天最多可以进行j次交易的最大利润为全局最优解
    15     //给定每天的股票价格
    16    //遍历,计算出第x天之前的一次交易可以得到的最大效益,存储到former[n]中
    17 //遍历,计算出第x天之后的一次交易可以得到的最大效益,存储在latter[n]中
    18 //遍历,计算former[i] +latter[i] 得到最大效益max    
    19     int prices[Maxlen];//存储每天的股票价值
    20     int i,j,k,n;//n代表的是给定的天数
    21     while(~scanf("%d",&n)){
    22         for(i=0;i<n;i++)
    23             scanf("%d",&prices[i]);
    24         int former[Maxlen];//第n天前的一次交易的最大收益
    25         int latter[Maxlen];//第n天后的一次交易的最大效益
    26         int MinPrice=INF;
    27         int MaxPrice=_INF;
    28         int Maxans=0;
    29         //分别通过遍历求解former和latter数组
    30         for(i=0;i<n;i++){
    31             MinPrice=min(MinPrice,prices[i]);
    32             Maxans=max(Maxans,prices[i]-MinPrice);
    33             former[i]=Maxans;
    34         }
    35         //其中Minprice代表的是n天之前的股票价格的最小值
    36         //其中maxans代表的是n天之前当时的最大收益
    37         Maxans=0;
    38         for(i=n-1;i>=0;i--){
    39             MaxPrice=max(MaxPrice,prices[i]);
    40             Maxans=max(Maxans,MaxPrice-prices[i]);
    41             latter[i]=Maxans;
    42         }
    43         Maxans=0;
    44         for(i=0;i<n;i++)
    45             Maxans=max(Maxans,former[i]+latter[i]);
    46         printf("%d
    ",Maxans);
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    springboot整合shiro进行权限管理
    多线程基础(一)
    面试杂谈(一)
    Spring循环依赖问题
    记一次电话面试的题目
    Jvm垃圾回收器(终结篇)
    Jvm垃圾回收器(算法篇)
    Jvm垃圾回收器(基础篇)
    Java内存模型探秘
    Jvm类的加载机制
  • 原文地址:https://www.cnblogs.com/visper/p/10046133.html
Copyright © 2020-2023  润新知