#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n; // n: 상담 가능한 날
cin >> n;
vector<int> DP(n+1,0);
vector<int> T(n+1,0);
vector<int> P(n+1,0);
for(int i=1; i<=n; i++){
int t, p; // t: 상담별 기간, p : 상담 시 수익
cin >> t >> p;
if((i+t-1)<=n){ // n보다 큰 경우는 넣지 않음
T[i] = t;
P[i] = p;
}
}
for(int i=1; i<=n; i++){
// i-1일 지난 후 최대값 = max(i+T[i]-1번째 상담 수행했을 때 최대값, i-1번째날까지 최대값+i번째날 수익값)
if((i+T[i]-1)<=n) DP[i+T[i]-1] = max(DP[i+T[i]-1], DP[i-1] + P[i]);
// 오늘 쉴 때 최대 수익 업데이트
DP[i] = max(DP[i], DP[i-1]);
//cout << "DP[" << i << "]: " << DP[i] << endl;
}
cout << DP[n] << endl;
return 0;
}
[BOJ] 7576: 토마토 (C++) (1) | 2024.03.05 |
---|---|
[Softeer] [HSAT 7회 정기 코딩 인증평가 기출] 순서대로 방문하기 (C++) (0) | 2024.02.25 |
[BOJ] 2875 (C++) (1) | 2024.02.25 |
[Softeer] 자동차 테스트 (C++) (0) | 2024.02.16 |
[Softeer] 성적평균 (C++) (0) | 2024.02.15 |