Baekjoon Review
[Gold 5] 15486 퇴사 2
hanseongbugi
2024. 3. 4. 18:01
https://www.acmicpc.net/problem/15486
15486번: 퇴사 2
첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)
www.acmicpc.net
이 문제는 dynamic programming 문제이다.
dp에 상담 금액의 최대 값을 저장한다.
이때 상담 시간을 결정하면 일정 기간동안 다음 상담을 신청할 수 없다는 조건이 있기 때문에 현재 결정한 상담 시 금액과 지난 상담의 합과 dp에 저장된 현재 결정한 상담 시간과의 최대 값을 골라 dp에 저장해야한다.
#include<iostream>
using namespace std;
int N;
pair<int,int> arr[1500001];
int dp[1500001];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>N;
for(int i = 1;i<=N;i++)
cin>>arr[i].first>>arr[i].second;
int result = 0;
for(int i = 1;i<=N+1;i++){
result = max(result, dp[i]);
dp[i+arr[i].first] = max(result + arr[i].second, dp[i + arr[i].first]);
}
cout<<result<<'\n';
return 0;
}