AcWing 1057. 股票买卖 IV 题解 (动态规划—DP—状态机模型)
作者:互联网
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, M = 110;
int n, m;
int w[N];
int f[N][M][2];
int main()
{
cin>>n>>m;
for(int i = 1; i <= n; i ++ ){
cin>>w[i];
}
memset(f, -0x3f, sizeof f);//初始化
for(int i = 0; i <= n; i ++ ) f[i][0][0] = 0;//初始化,将所有进行第0笔交易的状态初始化为0
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= m; j ++ ){
f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1] + w[i]);
/*
f[i][j][0]表示第i天进行j笔交易之后手里没有股票的情况
他由第i-1天手里没有股票 或 第i-1天手里没股票进行卖出操作 转移而来
*/
f[i][j][1] = max(f[i - 1][j][1], f[i - 1][j - 1][0] - w[i]);
/*
默认将买入操作记为操作数+1
f[i][j][1]表示第i天进行了j笔交易之后手里有股票的情况
他由第i-1天手里有股票没有进行操作 或 第i-1天进行了j-1笔交易手里没有股票但是进行了买入操作 转移而来
*/
}
}
int res = 0;
for(int i = 0; i <= m; i ++ ) res = max(f[n][i][0], res);//遍历找到手里资产最多的情况
cout<<res<<endl;
return 0;
}
标签:max,1057,int,题解,cin,手里,状态机,股票,进行 来源: https://blog.csdn.net/qiaodxs/article/details/122492962