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, 상태 앞에 오는 방법은 중요하지 않습니다. 전원 버튼을 몇 재고 문제는 기본 개념이지만,이 질문의 아이디어와 설정 상태는 정확히 동일합니다.