728x90
반응형
https://www.acmicpc.net/problem/1495
1495번: 기타리스트
첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다.
www.acmicpc.net
문제 해결
- 전형적인 DP문제
- dp[i][j]를 i번째 볼륨조절 후 j의 볼륨 가능 유무로 정의할 수 있다.
CODE
import sys
input = sys.stdin.readline
n, s, m = map(int, input().split()) # 곡 개수, 시작 볼륨, 최대 볼륨
V = [0] + list(map(int, input().split()))
dp = [[0 for _ in range(m+1)] for _ in range(n+1)]
dp[0][s] = 1
for i in range(1,n+1):
for j in range(m+1):
if dp[i-1][j] == 1:
if j + V[i] <=m:
dp[i][j+V[i]] = 1
if j - V[i] >=0:
dp[i][j-V[i]] = 1
for i in range(m,-1,-1):
if dp[n][i] == 1:
print(i)
exit()
else:
print(-1)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 9084 동전 (0) | 2023.03.22 |
---|---|
[python] 백준 1092 배 (0) | 2023.03.21 |
[python] 백준 2631 줄세우기 (0) | 2023.03.20 |
[python] 백준 15683 감시 (0) | 2023.03.19 |
[python] 백준 1057 토너먼트 (0) | 2023.03.19 |
댓글