2 5
1 2 3 0 2
0 0 5 4 3
8
1 #include <iostream> 2 #include <vector> 3 #include <stdio.h> 4 #include <queue> 5 #include <cmath> 6 using namespace std; 7 int n,m; 8 int main(){ 9 int sum = 0; 10 cin>>n>>m; 11 vector<int>day(m); 12 vector<vector<int> >dp(m + 1,vector<int>(3,0));; 13 while(n--){ 14 dp[0][0] = INT_MIN;//第0天买入,防止后面跌的数字都比它大 15 dp[0][1] = dp[0][2] = 0;//第0天买入,没有收益 16 for(int i = 0;i < m;i++){ 17 cin>>day[i]; 18 } 19 for(int i = 1;i <= m;i++){ 20 //dp[i][0]存放第i天没卖股票的收益 21 //dp[i][1]存放第i天卖了股票的收益 22 //dp[i][2]存放第i - 1天卖了股票,第i天为冷冻期的收益 23 24 dp[i][0] = max(dp[i - 1][0],dp[i - 1][2] - day[i - 1]); 25 //今天的收益等于max(昨天没卖有股票,今天才买股票) 26 dp[i][1] = day[i - 1] + dp[i][0]; 27 //今天0点卖股票后的收益等于今天持有的股票收益加上昨天的股票价格 28 dp[i][2] = max(dp[i - 1][1],dp[i - 1][2]); 29 //今天冷冻期的话,今天的收益等于今天0点买股票或者昨天0点买股票 30 } 31 sum += max(dp[m][1],dp[m][2]); 32 } 33 cout << sum <<endl; 34 return 0; 35 }
DP(动态规划求含有冻结期的买卖股票)-05-动态规划-买卖股票
原文:https://www.cnblogs.com/qinqin-me/p/12256704.html