E23 线性DP 股票买卖K笔交易
E23 线性DP 股票买卖K笔交易_哔哩哔哩_bilibili
#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]; }
浙公网安备 33010602011771号