문제링크 : https://www.acmicpc.net/problem/14501
#include <bits/stdc++.h>
using namespace std;
int n;
int t[16], p[16], dp[16] = {0};
int result = 0, sum = 0;
int main()
{
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> t[i] >> p[i]; //기간과 금액 입력
for (int j = 0; j < i; j++) //상담 기간이 현재 i보다 작은 것 찾기
{
if (t[j] + j <= i && t[i] + i - 1<= n) // j일과 j기간의 합이 <=i 일때와,
{ // i일과 i기간의 합과 중복값 1을 뺀 값이 <=n 일 때
dp[i] = max(dp[i], dp[j] + p[i]); //그전까지 저장한 값이 큰가, 새롭게 더한 값이 더 큰가
}
}
}
sort(dp, dp+16);
cout << dp[15]; //정렬해서 마지막 값(가장 큰) 출력
return 0;
}
가장 큰 값은 dp 배열을 정렬하여 마지막 값을 출력했다.
'백준 > 실버' 카테고리의 다른 글
[백준 11060번] 점프 점프 (C++) (0) | 2023.02.06 |
---|---|
[백준 2193번] 이친수 (C++) (0) | 2023.02.06 |
[백준 11048번] 이동하기 (C++) (0) | 2023.02.06 |
[백준 11722번] 가장 긴 감소하는 부분 수열 (C++) (0) | 2023.02.06 |
[백준 11055번] 가장 큰 증가 부분 수열 (C++) (0) | 2023.02.06 |