E23 线性DP 股票买卖K笔交易

E23 线性DP 股票买卖K笔交易_哔哩哔哩_bilibili

 

U281153 【状态机】股票交易 - 洛谷

#include<bits/stdc++.h>
using namespace std;

const int N=100010;
int n,k,w[N],f[N][110][2];

int main(){
  cin>>n>>k;
  for(int i=1; i<=n; i++) cin>>w[i];
  
  for(int j=0; j<=k; j++) f[0][j][1]=-1e6;

  for(int i=1; i<=n; i++){
    for(int j=1; j<=k; j++){
      f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1]+w[i]);
      f[i][j][1]=max(f[i-1][j][1],f[i-1][j-1][0]-w[i]);
    }
  }
  cout<<f[n][k][0];
}

 

// 空间优化
#include<bits/stdc++.h>
using namespace std;

const int N=100010;
int n,k,w[N],f[110][2];

int main(){
  cin>>n>>k;
  for(int i=1; i<=n; i++) cin>>w[i];
  
  for(int j=0; j<=k; j++) f[j][1]=-1e6;
  
  for(int i=1; i<=n; i++){
    for(int j=1; j<=k; j++){      
      f[j][0]=max(f[j][0],f[j][1]+w[i]);
      f[j][1]=max(f[j][1],f[j-1][0]-w[i]);
    }
  }
  cout<<f[k][0];
}

 

posted @ 2023-04-10 10:09  董晓  阅读(622)  评论(1)    收藏  举报