| 
					
				 | 
			
			
				@@ -0,0 +1,27 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class Solution { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int maxProfit(int k, int[] prices) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int profit = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (prices.length == 0) return profit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (prices.length / 2 < k) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (int i = 1; i < prices.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                profit += Math.max(0, prices[i] - prices[i - 1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return profit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int[][] dp = new int[k + 1][prices.length + 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // dp[i][j] = max( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //     dp[i][j - 1], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //     max(dp[i - 1][l] + prices[j] - prices[l]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //         => prices[j] + max(dp[i - 1][l] - prices[l]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // ), 0 <= l < j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int i = 1; i <= k; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int max = dp[i - 1][0] - prices[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (int j = 1; j <= prices.length; j++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dp[i][j] = Math.max(dp[i][j - 1], prices[j - 1] + max); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                max = Math.max(max, dp[i - 1][j] - prices[j - 1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                profit = Math.max(profit, dp[i][j]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return profit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |