Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 순열
- 스카이라인 쉬운거
- Parcelable
- BFS
- Android
- 2501
- 자바
- imeOptions
- 백준
- 약수 구하기
- hilt
- 지능형 기차2
- val
- 백준 퇴사
- 최단경로
- 완전탐색
- 오르막수
- 시뮬레이션
- SWEA
- EditorInfo
- EditText
- BuildConfig
- 백준 14501
- 프로그래머스
- Kotlin
- 조합
- 순수함수
- Parcelize
- dfs
- java
Archives
- Today
- Total
안드 공부를 해볼까?
[Java] 백준 가장 큰 부분 수열 본문
728x90
1. 문제분석
부분 수열의 합 중에 가장 큰 수를 구하는 문제다.
증가하는 부분 수열이어야 하니 a[j] < a[i]
만약 조건에 맞을 때는 dp테이블에 저장된 값을 가져와 더해주면 된다.
2. 구현
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int dp[] = new int[N+1];
int map[] = new int[N+1];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++) {
map[i] = Integer.parseInt(st.nextToken());
dp[i] = map[i];
}
int result = dp[1];
for(int i=1; i<=N; i++) {
for(int j=1; j<i; j++) {
if(map[j] < map[i]) {
dp[i] = Math.max(dp[j]+map[i], dp[i]);
result = Math.max(result, dp[i]);
}
}
}
System.out.println(result);
br.close();
}
}
3. 마무리
ㅇDP는 정말 풀어도 이해가 가지 않는다.
그래도 이번에 LIS가 뭔지 알았으니 계속 이어나가야 겠다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 포도주 시식 (0) | 2022.08.06 |
---|---|
[Java] 백준 스티커 (0) | 2022.08.06 |
[Java] 백준 연속합 (0) | 2022.08.02 |
[Java] 백준 토마토 (0) | 2022.06.28 |
[Java] 백준 봄버맨 (0) | 2022.06.28 |
Comments