• 至多可以交易k次的股票交易 (c++)


     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string.h>
     4 using namespace std;
     5 
     6 const int Maxlen=1e5;
     7 int prices[Maxlen];
     8 int  n,k;
     9 
    10 int quickSolve(){
    11     //as long as there is a price gap ,we gain a profit
    12     int profit=0;
    13     for(int i=1;i<n;i++)
    14         if(prices[i] > prices[i-1]) profit+=prices[i]-prices[i-1];
    15     return profit;
    16 }
    17 
    18 int MaxProfit(){
    19     int i,j;
    20     if(n == 0)
    21         return 0;
    22     else if(n/2 < k)
    23         return quickSolve();//避免k过大所引起的超时的问题    
    24     int buy[Maxlen],sell[Maxlen];
    25     for(i=0;i<n;i++){
    26         buy[i]=-0x3f3f3f;
    27         sell[i]=0;
    28     }
    29     //初始化
    30 
    31     for(i=0;i<n;i++){
    32         for(j=1;j<=k;j++){
    33             buy[j]=max(buy[j],sell[j-1]-prices[i]);
    34             sell[j]=max(sell[j],buy[j]+prices[i]);
    35         }
    36     }
    37     return sell[k];
    38 }
    39 
    40 
    41 int main(){
    42     
    43     //依然是股票交易问题 但是至多只能交易k次
    44     //使用的核心算法是动态规划 
    45     //核心思路是用两个数组buy和sell分别表示第i次买入交易的最大收益和第i次卖出的最大收益知
    46     //DP状态转移方程
    47     //buy[j]=max(buy[j] , sell[j-1] - prices[i] );//在第i点处进行第j次买入交易
    48     //sell[j]=max(sell[j],buy[j]+prices[i]);//在第i点处进行第j次卖出交易
    49     //此时,用quicksolve函数来解决若k太大引起的超时问题,简化到允许到多次交易的问题
    50     int i,j;
    51     while(~scanf("%d %d",&n,&k)){
    52         for(i=0;i<n;i++)
    53             scanf("%d",&prices[i]);
    54         printf("%d
    ",MaxProfit());
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    宏 定 义 编 译 出 错
    SSWR 跟 进一法除法
    显示文件后缀扩展名
    基于MPLAB X IDE配置位设置讲解
    mplab xIde 编译成功,但不能生成Hex文件
    InputStream 、 InputStreamReader 、 BufferedReader
    MPLAB® XC C编译器的Workstation License的获取及安装方法
    MPLAB设置路径
    js中的cookie及封装
    nodejs中使用node-sass
  • 原文地址:https://www.cnblogs.com/visper/p/10046244.html
Copyright © 2020-2023  润新知