📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
https://www.acmicpc.net/problem/11052
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] p = new int[N + 1];
int[] dp = new int[N + 1];
StringTokenizer st =new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
p[i] = Integer.parseInt(st.nextToken());
}
dp[1] = p[1];
for(int i=2; i<N+1; i++){
for(int j=0; j<i+1; j++){
dp[i] = Math.max(dp[i], dp[j]+p[i-j]);
}
}
System.out.println(dp[N]);
}
}
풀이는 간단하다.
N=2 라고 가정했을때 1개짜리 + 1개짜리, 0개짜리 + 2개짜리 이렇게 나눠진다. 그럼 이 들을 점화식으로 계산해보면
dp[j] + p[i-j] 로나오게 된다. 이떄 dp[i] 랑 max 비교해서 최대값을 넣어주면서 계사하면 끝난다.
[백준 3190번] 뱀 (0) | 2025.04.01 |
---|---|
[백준 2805번] 나무 자르기 (0) | 2025.04.01 |
[백준 2156번] 포도주 시식 (0) | 2025.03.25 |
[백준 15666번] 로봇 조종하기 (0) | 2025.03.24 |
[백준 15666번] N과 M(12) (0) | 2025.03.23 |