방명록
- [BOJ] 14501 : 퇴사 - java2024년 08월 20일 09시 28분 48초에 업로드 된 글입니다.작성자: hwangmono__o
문제
https://www.acmicpc.net/problem/14501
문제풀이
이 문제는 주어진 기간 동안 여러 상담 일정을 조정하여 얻을 수 있는 최대 수익을 계산하는 문제입니다. 각 상담은 특정 기간이 소요되며, 그 기간 동안 다른 상담을 진행할 수 없습니다. 목표는 상담 일정을 최적화하여 가능한 최대 수익을 얻는 것입니다.
동적 프로그래밍(DP)을 사용하여 각 날에 얻을 수 있는 최대 수익을 이전 날의 최대 수익과 비교하여 점진적으로 계산합니다.
특정 날 i 에 상담을 수행할 수 있는 경우 상담을 진행하여 얻는 수익을 고려하여 해당 상담이 끝나는 날(i + t[i])에 최대 수익을 갱신
소스코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class _14501 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] t = new int[N]; int[] p = new int[N]; int[] maxP = new int[N + 1]; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); t[i] = Integer.parseInt(st.nextToken()); p[i] = Integer.parseInt(st.nextToken()); } for (int i = 0; i < N; i++) { if (i + t[i] <= N) { maxP[i + t[i]] = Math.max(maxP[i + t[i]], maxP[i] + p[i]); } maxP[i + 1] = Math.max(maxP[i + 1], maxP[i]); } System.out.println(maxP[N]); } }
etc
알고리즘 분류 : 다이나믹 프로그래밍, 브루트포스 알고리즘
다이나믹 프로그래밍
다이나믹 프로그래밍이란? 다이나믹 프로그래밍은 복잡한 문제를 여러 하위 문제로 나누어 해결한 뒤, 그 결과를 결합하여 전체 문제를 해결하는 방법입니다. DP는 주로 중복된 하위 문제가 존
djun95.tistory.com
브루트포스 탐색 알고리즘
브루트포스 알고리즘이란?브루트포스 알고리즘은 가능한 모든 경우를 탐색하여 문제를 해결하는 방법입니다. "완전 탐색"이라고도 불리며, 무차별 대입 방식으로 모든 후보를 검사합니다. 이
djun95.tistory.com
'Algorithm > 백준' 카테고리의 다른 글
[BOJ] 1912 : 연속합 - java (0) 2024.07.16 [BOJ] 1254 : 팰린드롬 만들기 - java (0) 2024.07.04 [BOJ] 3019 : 테트리스 - java (0) 2024.06.21 [BOJ] 28702 : FizzBuzz - java (0) 2024.06.05 [BOJ] 30802 : 웰컴 키트 - java (0) 2024.06.05 다음글이 없습니다.이전글이 없습니다.댓글