백준 14501 - 퇴사
생각 및 접근
동적 프로그래밍을 통해 n번 날짜에서 가질수 있는 최대 금액을 기록 하려고 했다.
상담 일정표에서 맨 앞에 것 부터 탐색한다.
상담이 끝났을 때의 날짜 이후는 그 상담의 보상을 받을 수 있는 날짜들이다. 그러므로,
그 상담이 시작되는 날까지 받을 수 있는 보상 + 그 상담의 보상
이 큰지,그 상담이 없어도 기존에 가질 수 있는 보상
이 더 큰지 비교하면 된다.for(int i = 1; i <= n; i++){ int day = d[i] + i; int pay = p[i] + dp[i]; for(int j = day; j <= n + 1; j++){ dp[j] = max(dp[j], pay); } }
코드
#include <bits/stdc++.h>
using namespace std;
int n, a, b, d[16], p[16], dp[16];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a >> b;
d[i] = a;
p[i] = b;
}
for(int i = 1; i <= n; i++){
int day = d[i] + i;
int pay = p[i] + dp[i];
for(int j = day; j <= n + 1; j++){
dp[j] = max(dp[j], pay);
}
}
cout << dp[n + 1];
}
채점 결과
'Coding Test > acmicpc' 카테고리의 다른 글
백준 1759 - 암호 만들기 (c++) (0) | 2020.08.05 |
---|---|
백준 1074 - Z (c++) (0) | 2020.08.05 |
백준 1339 - 단어 수학 (c++) (0) | 2020.08.04 |
백준 1748 - 수 이어 쓰기 1 (c++) (0) | 2020.08.03 |
백준 6064 - 카잉 달력 (c++) (0) | 2020.08.03 |