leetcode 얼굴 질문 17.16. 맛사지 동적 프로그래밍 이차원 도둑 시리즈 198 213 337

leetcode 얼굴 질문 17.16. 맛사지 동적 프로그래밍 이차원 도둑 시리즈 198 213 337


leetcode 2020 3월 1일 질문 매일 펀치
프로그래머 인터뷰 골든
비슷한 질문 : 도둑 시리즈 (leetcode198 (213) 337) 198 강도

주제 :

예약 요구를 일정 수신처 치료 공지 마사지는 예약 연결된 각각의 연결 여부를 선택할 수있다. 그녀는 이웃 약속을 받아 들일 수 있도록 각 예약 서비스 사이에 휴식 시간이있다. 예약 요청의 순서 감안할 때, 마사지 치료사에 대한 예약은 최적의 세트 (긴 전체 예약)를 찾아 분의 총 수를 반환합니다. 참고 :이 문제는 원래 제목 상대적으로 작은 변화이다

실시 예 1 :
입력 [1,2,3,1]
출력 : 4
명 : 예약 번호 및 예약 번호 3, 전체 길이 = 3 + 1 = 4를 선택.
실시 예 2 :
입력 [2,7,9,3,1]
출력 : 12
명 : 예약 번호를 선택하고, 제 3 및 제 5 예약 예약, 전체 길이 = 2 + 9 + 1 = 12.
실시 예 3 :
입 [2,1,4,5,3,1,1,3]
출력 : 12
명 : 1 개 선택 번호 예약, 예약 3 번, 5 번 및 8 번 예약 예약, 전체 길이 = 2 + 4 + 3 + 3 = 12.

출처 : 숙박 버튼 (LeetCode)
링크 : HTTPS : //leetcode-cn.com/problems/the-masseuse-lcci

방법 : 동적 프로그래밍 (이차원), 도둑 시리즈 (213 leetcode198 337)

두 차원 동적 프로그래밍, DP [I] [0]는 i 번째 예약 최대 예약 시간 DP [I] [1]과 접촉하지 않는 나타내는 i 번째 최대 예약 시간에 예약 접촉을 나타낸다. 다시 앞에서 계산 DP 값은 전면 I-1 번째의 값이 산출된다 (DP) DP 우리가 계산 한 가정 [I] [0] DP [I] [1]. 상태 전이 식 : DP [I] [0] 최대 = (DP가 [I-1] [0], DP [I-1] [1]), P [I] [1] = (DP) [I-1] 0] + nums [I]. (계산 DP [I] [0/1] 이전 상태에만 DP [I-1] [0/1] 관련 우리 배열을 열 수 있도록, 두 변수 DP0, DP1 저장소 DP [ I-1] [0] 응답 [I-1 업데이트로 응답을 전송] [1] 다음.) 시간 복잡도 DPO (N)우주의 복잡성O (1).

코드 :

class Solution(object):
    def massage(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        # 两维度动态规划
        if nums==[]:
            return 0
        dp0=0
        dp1=nums[0]
        for num in nums[1:]:
            predp0=dp0
            dp0=max(dp0,dp1)
            dp1=predp0+num
        
        return max(dp0,dp1)

생각 :

  1. 동적 프로그래밍 단계 : 설계 조건 - 출력을 결정하는 단계 - - 초기 값 (경계 값)을 결정하는 단계 - 상태 천이 식 판정 (압축 상태 여부)
  2. 제거 치수를 증가시킴으로써 후유증 동적 프로그래밍 문제의 동작이 매우 많았다. 이해의 어떤 후유증 : 이전 결정에 영향을 미치지 않습니다 결정 뒤에 1, 2, 상태 앞에 오는 방법은 중요하지 않습니다. 전원 버튼을 몇 재고 문제는 기본 개념이지만,이 질문의 아이디어와 설정 상태는 정확히 동일합니다.
게시 25 개 원래 기사 · 원 찬양 1 · 조회수 283

추천

출처blog.csdn.net/weixin_43973433/article/details/105065668