본문 바로가기
백준 문제 풀이 & C++ 공부

백준 15468 C++

by daisy0461 2025. 3. 15.

처음에는 날짜를 골라서 fill로 다 초기화할까 생각했는데 너무 비효율적인 것 같고

결국 이전값 중에서 최대값과 여기까지 쌓인값 + cost 뭐가 큰지 비교해야해서

그냥 이전값 중 최대값을 계속 갱신을 했다.

 

이전 값 중 최대값과 현재값을 비교해야하면 이전 값 중 최대값을 변수로 하나 지정해서

계속 최대값을 갱신하면 되겠다.

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n;		//1<=n<=1500000
pair<int, int> p[1500010];		//걸리는 날짜, 받는 돈
int dp[1500010];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;

	int result = 0;
	int cur = 0;
	int day, cost;
	for (int i = 0; i < n; i++) {
		cin >> day >> cost;
		
		cur = max(cur, dp[i]);		//이전의 dp[i]의 값들과 현재 dp[i]의 값과 비교한다.

		if (i + day < n) {
			dp[i + day] = max(dp[i + day], cur + cost);			//이전에 언젠가 dp에 넣었던 값 vs 이전 dp들 중 최대값 + 받을 돈이냐
			result = max(result, dp[i + day]);
		}
	}
	cout << result;
}

 

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 11066 C++  (0) 2025.03.26
백준 11049 C++  (0) 2025.03.26
백준 11722 C++  (0) 2025.03.14
백준 11726 C++  (0) 2025.03.05
백준 2579 C++  (0) 2025.03.05