zoukankan      html  css  js  c++  java
  • 至多可以交易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 }
  • 相关阅读:
    [Python]机器学习:Tensorflow实现线性回归
    Python之Numpy:线性代数/矩阵运算
    特殊环境的安装教程[汇总]
    C/C++之编程语言学习资源
    Python之文件操作工具
    NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)
    网络分析:WireShark
    Linux/Window之定时任务脚本编写
    CSS之Background
    JavaScript之iframe页面间通信
  • 原文地址:https://www.cnblogs.com/visper/p/10046244.html
Copyright © 2011-2022 走看看