--- title: "股票买卖" created: 2025-11-28 tags: - 算法 --- # 股票买卖 ## 题目 [**股票买卖 IV**](https://www.acwing.com/problem/content/1059/) ![[image-00c370b6.png]] ## 思路分析 ![[image-e8823b66.png]] ## 代码实现 ```cpp #include using namespace std; #define endl '\n' const int N=1e5+10,M=110; int n,k; int w[N]; int f[N][M][2];//考虑前i天的股票,第i天的 决策 是 k,且完成的 完整交易数 为 j 的方案 int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n>>k; for(int i=1;i<=n;i++) cin>>w[i]; memset(f,-0x3f,sizeof f); f[0][0][0]=0; for(int i=1;i<=n;i++){ for(int j=0;j<=k;j++){ f[i][j][0]=f[i-1][j][0]; if(j) f[i][j][0]=max(f[i][j][0],f[i-1][j-1][1]+w[i]); f[i][j][1]=max(f[i-1][j][1],f[i-1][j][0]-w[i]); } } int res=0; for(int j=0;j<=k;j++){ res=max(res,f[n][j][0]);//出口一定是在 当前手上没股票的时候 如果有 就烂手里了 肯定亏 } cout<