MJay

[CSE 565] - DP - Easy Task vs Hard Task 본문

PSU/CSE 565 - Algorithm

[CSE 565] - DP - Easy Task vs Hard Task

MJSon 2019. 10. 5. 04:41

 

 



n days 가 있고

 

easy task -> ak 를 준다  k는 1<= k <= n 

 

hard task -> bk를 준다 k는 1<= k <= n 이다

 

아무것도 안하면 그냥 reward를 준다

 

hard task 를 k day에 하면  1<= k < = n, k+1에 일을 하면 안된다. 

 

ak 랑 bk가 주어지면 알고리즘을 짠다 -> 그래서 total rewards가 maximize 되야 한다

 

여기서 확실하게 알수있는건

 

a(k) 는 ai = max{(a(i-1) + ai} 일 것이다 i <= k < n

 

b(k) 는 bi = max{a(i-1) + bk, b(i-2) + bk }

 

이거인거 같은데 

 

즉 이 둘 중에서 

 

max를 고르면 된다. 

 

max (high[i] + max_task(high,low, i-2)), low[i] + max_task(high,low,(i-1))

 

award_array - 맥시멈으로 얻을 수 있는 양

 

초기화 - 처음에 award_array 를 다 0으로 한다.

 

task_dp[0] = 0 이다 

 

n = 1 이라면 award_array[1] = max{a0, b0}

 

award_array[i] = max{ak[i-1] + award_array[i-2], bk[i-1] +award_array[i-1]}

 

Termination = award_array[n] 를 return 하면 된다. 

 

Time Complexity = O(n)

 

Subproblems O(n)  Time complexity - 이렇게 하면 된다. 

 

정리를 해보면 이렇게 된다. 

 









'PSU > CSE 565 - Algorithm' 카테고리의 다른 글

[CSE 565] - 2019-10-07.pdf 일단 오늘꺼 정리  (0) 2019.10.09
[CSE 565] - 2019-10-07.pdf  (0) 2019.10.09
[CSE 565] - 2019-10-07.pdf  (0) 2019.10.09
[CSE 565] 시험 공부  (0) 2019.10.09
[CSE 565] - Algorithm homework2 - (1)  (0) 2019.10.06