문제
https://www.acmicpc.net/problem/10211
최대 합을 가진 연속 부분집합 구하기.
주의할 점은, 그냥 합이 큰 부분집합아니고 연속 집합이어야 한다는 점..!
핵심 코드
i 인덱스까지 왔을 때,
끊고 가는게 크냐, 합이 크냐.dp[i] = max(dp[i-1] + x[i] , x[i])
최종적으로 dp중에 max 찾아주면 가장 큰 부분집합의 합이 들어있는 value를 찾을 수 있다.
참고
원소 합이 가장 컸을 때를 구하기만 하면 되는 거면dp[i] = max(dp[i-1] + x[i] , dp[i-1])
을 통해 i 인덱스의 값을 합에 포함할 지 아닐지를 판단해주면 된다. 근데 위 문제는 앞에 달린 애들을 버릴거냐 말거냐이다.. 한끝 차이네.
최종 코드
t = int(input())
while t!=0:
t -= 1
n = int(input())
x = list(map(int, input().split()))
dp = [0]*(n)
dp[0] = x[0]
for i in range(1,n):
dp[i] = max(dp[i-1] + x[i], x[i])
print(max(dp))
'⚡️algorithm' 카테고리의 다른 글
[DP] 백준 2208. 보석줍기 (1) | 2022.05.19 |
---|---|
프로그래머스 징검다리 - ing (0) | 2022.05.18 |
[이분탐색] 프로그래머스. 입국심사 (0) | 2022.05.18 |
[이분탐색] 백준 11662. 민호와강호 (거리계산, 수학, 삼분탐색) (0) | 2022.05.18 |
[이분탐색] 백준 10815. 숫자카드 (0) | 2022.05.18 |