728x90
반응형
https://www.acmicpc.net/problem/30621
문제
'어?'
팀 대회 중 주변에서 '어?'라는 말이 들리면 마음이 혼란해진다. 그렇다고 해서 '어?'를 남발하면 혼란보다는 짜증이 앞서게 된다. 이를 잘 알고 있는 성우는 적당한 선을 지키면서 대회장에 최대한 큰 혼란을 주려고 한다.
- 대회는 시각 0에 시작한다.
- 성우가 '어?'를 외칠 수 있는 시각은 개가 있고, 번째 시각은 다. (1≤i≤N)
- 만약 성우가 시각 에 '어?'를 외치려 한다면, 성우는 시각 부터 지금까지 '어?'를 외친 적이 없어야 한다.
- 성우가 정확히 시각 에 '어?'를 외쳤더라도 시각 에 '어?'를 외칠 수 없다.
성우가 시각 에 '어?'를 외치면 대회장에 만큼의 혼란이 가해진다. 최종 혼란은 대회장에 가해진 혼란의 합이다.
성우는 대회장에 줄 수 있는 최종 혼란의 최댓값이 궁금해졌다. 성우를 위해 이를 구해주자.
입력
첫 번째 줄에 성우가 '어?'를 외칠 수 있는 시각의 개수 이 주어진다. (1≤N≤100000)
두 번째 줄에 정수 이 공백을 사이에 두고 주어진다. (1≤ t_i ≤10^9 ; t_i-1 < t_i )
세 번째 줄에 정수 이 공백을 사이에 두고 주어진다. (1≤b_i≤109 ; b_i≤t_i)
네 번째 줄에 정수 이 공백을 사이에 두고 주어진다. (1≤c_i ≤10^9)
출력
첫 번째 줄에 성우가 대회장에 줄 수 있는 최종 혼란의 최댓값을 출력한다.
풀이
Code
import sys
from bisect import bisect_left
input = sys.stdin.readline
def solution(n, time, blank, cost) :
# 1. 시각, 혼란값 dp 생성
dp = [0 for _ in range(n+1)]
# 2.
for i in range(1, n+1) :
t, b, c = time[i], blank[i], cost[i]
# 2-1. t - b초 직전의 초에 해당하는 인덱스 값 찾기
idx = bisect_left(time, t-b) - 1
# 2-2. 점화식에 따라 최대 혼란값 생성
dp[i] = max(dp[i-1], dp[idx] + c) if idx >= 0 else max(dp[i-1], c)
# 3. 결과 출력
print(dp[-1])
if __name__ == "__main__" :
n = int(input())
time = [0] + list(map(int, input().split()))
blank = [0] + list(map(int, input().split()))
cost = [0] + list(map(int, input().split()))
solution(n, time, blank, cost)
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 2314. 이세계 게임 (1) | 2024.01.02 |
---|---|
[Python/BOJ] 23844. 트리 정리하기 (1) | 2024.01.01 |
[Python/BOJ] 22867. 종점 (1) | 2023.12.28 |
[Python/BOJ] 3987. 보이저 1호 (1) | 2023.12.26 |
[Python/BOJ] 11066. 파일 합치기 (0) | 2023.12.25 |