morenow
morenow
morenow
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (5)
    • [MSA] Spring Cloud로 개발하는 마이.. (14)
    • Baekjoon Online Judge (40)
    • Programmers (11)
    • Spring Boot (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • HTTP Interface
  • Spring Boot
  • 백준 파이어스톰
  • successHandler
  • 마법사 상어와 파이어스톰
  • write skew
  • jwt
  • JWT단점
  • HttpExchange
  • lost update
  • Id Token
  • B Tree
  • Open Feign
  • copy up
  • Feign Client
  • re-distribution
  • B+ Tree
  • 백준20058C++
  • Refresh Token Refresh
  • dirty write

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morenow

morenow

Baekjoon Online Judge

[BOJ] 14501 : 퇴사 (C++) with DP

2023. 9. 27. 05:01

https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

걸린 시간 : 21분 33초


알고리즘

다이나믹 프로그래밍이다. 예시로 나온 걸 차례대로 다 해보고, 거기서 일반항을 도출하면 끝이다.

모든 요소들을 돌면서 cost라는 dp 배열에 다음과 같이 실행한다.

cost의 초기 상태는 모두 0이다.

  1. i번째 요소는 현재 그 값이거나, 아니면 이전에 현재 값보다 더 큰 값이 올 수 있었다면 그 값이다. 따라서 최댓값을 하나 변수에 저장해두고 탐색할 때마다 i번째 요소를 최신화한다.
  2. 만약 이 상담을 진행하면 N+1 째날에 퇴사할 수 없을 경우, 즉 인덱스를 벗어날 경우 고려하지 않는다.
  3. 이번 상담을 했을 경우, 상담이 끝나는 날에 2가지 값 중 최댓값을 선택한다. 상담을 하는 경우 (cost[i] + P[i]) 혹은 상담을 하지 않는 경우 원래값 (cost[i] + T[i])
  4. 모든 경우에서 가장 큰 값을 찾아 출력한다.

정답 코드

#include <bits/stdc++.h>
using namespace std;

int N;
int cost[16], T[16], P[16];

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++)
		cin >> T[i] >> P[i];
	int mx = 0;
	for (int i = 0; i <= N; i++) {
		cost[i] = max(mx, cost[i]);
		if (i + T[i] <= N) {
			cost[i + T[i]] = max(cost[i] + P[i], cost[i + T[i]]);
		}
		mx = max(mx, cost[i]);
	}
	int ans = 0;
	for (int i = 1; i <= N; i++) {
		ans = max(ans, cost[i]);
	}
	cout << ans;
	return 0;
}

'Baekjoon Online Judge' 카테고리의 다른 글

[BOJ] 1520 : 내리막 길 (C++) with Top Down DP  (1) 2023.10.05
[BOJ] 11404 : 플로이드 (C++) with 플로이드  (1) 2023.10.04
[BOJ] 20056: 마법사 상어와 파이어볼 (C++)  (1) 2023.09.27
[BOJ] 17828 : 문자열 화폐 (C++)  (0) 2023.09.21
[BOJ] 20058 : 마법사 상어와 파이어스톰 (C++)  (1) 2023.09.07
    'Baekjoon Online Judge' 카테고리의 다른 글
    • [BOJ] 1520 : 내리막 길 (C++) with Top Down DP
    • [BOJ] 11404 : 플로이드 (C++) with 플로이드
    • [BOJ] 20056: 마법사 상어와 파이어볼 (C++)
    • [BOJ] 17828 : 문자열 화폐 (C++)
    morenow
    morenow

    티스토리툴바