Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

python에서 k 구매 및 판매 후 최대 수익을 찾는 프로그램

<시간/>

회사의 주가를 시간순으로 나타내는 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