Study hard
(c++)백준 1459번: 기타리스트 본문
1495번: 기타리스트
첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 100, 1 ≤ M ≤ 1000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다.
www.acmicpc.net
[풀이]
DP로 풀 수 있는 문제였다.
DP[i][j] : i번째 곡을 j 볼륨으로 연주 가능한가?(boolean)
점화식
if DP[i][j] AND j+V[i] <= M : DP[i+1][j+V[i]] = true
AND j-V[i] >= 0 : DP[i+1][j-V[i]] = true
#include <iostream>
#include <algorithm>//max
using namespace std;
int N, S, M;
int V[101];
bool DP[101][1001];
void solution() {
for (int i = 0; i <= N - 1; i++) {
for (int j = 0; j <= M; j++) {
if (DP[i][j]) {
if (j + V[i + 1] <= M)
DP[i + 1][j + V[i + 1]] = true;
if (j - V[i + 1] >= 0)
DP[i + 1][j - V[i + 1]] = true;
}
}
}
int res = -1;
for (int i = 0; i <= M; i++) {
if (DP[N][i])
res = i;
}
cout << res << '\n';
}
int main() {
cin >> N >> S >> M;
for (int i = 1; i <= N; i++) {
cin >> V[i];
}
DP[0][S] = true;
solution();
return 0;
}
'백준 > DP' 카테고리의 다른 글
(c++)백준 10422번: 괄호 (0) | 2020.09.16 |
---|---|
(c++)백준 12869번: 뮤탈리스크 (0) | 2020.09.15 |
(c++)백준 12865번: 평범한 배낭 (0) | 2020.09.15 |
(c++)백준 11066번: 파일 합치기 (0) | 2020.09.15 |
(c++)백준 15989번: 1, 2, 3 더하기 4 (0) | 2020.09.14 |