188.买卖股票的最佳时机 IV
最编程
2024-03-05 19:57:06
...
public class Solution {
public int MaxProfit(int k, int[] prices) {
if(prices.Length==0)
{
return 0;
}
int[,]dp=new int[prices.Length,k*2+1];
for(int i=1;i<k*2;i+=2)
{
dp[0,i]=-prices[0];
}
for(int i=1;i<prices.Length;i++)
{
for(int j=0;j<k*2-1;j+=2)
{
dp[i,j+1]=Math.Max(dp[i-1,j+1],dp[i-1,j]-prices[i]);
dp[i,j+2]=Math.Max(dp[i-1,j+2],dp[i-1,j+1]+prices[i]);
}
}
return dp[prices.Length-1,k*2];
}
}
遇上一题相比就是可以操作K次,所以二维数组的后一项就变为2K,然后利用for循环进行初始化和状态转移方程,和上一题同理。