문제 : https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
문제 요약 : 최대 이익 계산
입력 | 출력 |
1 ≤ N(일) ≤ 15 1 ≤ T(소요일) ≤ 5 1 ≤ P(이익) ≤ 1000 |
최대 이익 |
JAVA
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
16353541 | cbkpar | 14501 | 맞았습니다!! | 12908KB | 72ms | Java | 639B |
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n,i;
String str = "";
n = Integer.parseInt(br.readLine());
int[] dp = new int[n+1];
int[] t = new int[n];
int[] p = new int[n];
for(i=0;i<n;i++) {
str = br.readLine();
String[] arr = str.split(" ");
t[i]=Integer.parseInt(arr[0]);
p[i]=Integer.parseInt(arr[1]);
}
for(i=1;i<=n;i++) {
//이익을 첫날부터계산하지 않고 N일부터 거꾸로 계산함
dp[i]=Math.max(dp[i], dp[i-1]);//그 날 얻을 수 있는 이익은 그 전날 이익보다 크거나 같음
if(t[n-i]>i) continue; // 퇴사일 보다 넘어가면 무시
dp[i]=Math.max(dp[i], dp[i-t[n-i]]+p[n-i]); // 그날의 최댓값과 그전날의 최댓값+이익 중 큰 값으로 교체
}
System.out.println(dp[n]);
}
}
예시[입력]
10
5 50
4 40
3 30
2 20
1 10
1 10
2 20
3 30
4 40
5 50
과정[출력]
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 30 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 30 | 30 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 30 | 30 | 40 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 30 | 30 | 40 | 50 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 30 | 30 | 40 | 50 | 60 | 0 | 0 | 0 |
0 | 0 | 0 | 30 | 30 | 40 | 50 | 60 | 70 | 0 | 0 |
0 | 0 | 0 | 30 | 30 | 40 | 50 | 60 | 70 | 80 | 0 |
0 | 0 | 0 | 30 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
오답노트 : dp[i]=Math.max(dp[i], dp[i-1]); 을 써주지 않으면 조건에 만족하지 않을경우 그날의 최댓값을 알 수 없다.
'백준온라인' 카테고리의 다른 글
[백준온라인] 14503번 로봇 청소기 (0) | 2019.12.04 |
---|---|
[백준온라인] 14502번 연구소 (0) | 2019.12.04 |
[백준온라인] 14500번 테트로미노 (0) | 2019.12.04 |
[백준온라인] 14499번 주사위 굴리기 (0) | 2019.12.04 |
[백준온라인] 13458번 시험 감독 (0) | 2019.12.04 |