회사의 주가를 시간순으로 나타내는 nums라는 숫자 목록이 있고 또 다른 값 k가 있다고 가정하면 최대 k개의 매매로 얻을 수 있는 최대 이익을 찾아야 합니다. 매도 전, 매수 전 매도).
따라서 입력이 가격 =[7, 3, 5, 2, 3] k =2와 같으면 출력은 3이 됩니다. 3에서 구매한 다음 5에서 판매하고 2에서 다시 구매하고 판매할 수 있기 때문입니다. 3시에.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- dp() 함수를 정의합니다. 이것은 i, k, 샀습니다
- i가 가격의 크기와 같거나 k가 0과 같으면
- 0을 반환
- 구매가 사실이면
- (dp(i+1, k-1, False) + 가격[i]) 및 dp(i+1, k, 구매)의 최대 반환
- 그렇지 않으면
- (dp(i+1, k, True) - 가격[i]) 및 dp(i + 1, k, 구매)의 최대 반환
- 메인 메소드에서 dp(0, k, False)를 호출하고 결과를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution:def solve(self, prices, k):def dp(i, k, buy):if i ==len(prices) or k ==0:만약 사면 0 반환:return max(dp( i + 1, k - 1, False) + price[i], dp(i + 1, k, buy)) else:return max(dp(i + 1, k, True) - price[i], dp( i + 1, k, buy)) return dp(0, k, False)ob =Solution() 가격 =[7, 3, 5, 2, 3]k =2print(ob.solve(가격, k))사전>입력
[7, 3, 5, 2, 3], 2출력
3