Solution#
Memo#
- 최장부분수열, dp로 풀린다.
- 사실 이건 풀이법이 기억나서 금방 풀었다.
// Baekjoon - 11053
// https://www.acmicpc.net/problem/11053
use std::io::{self, Read, Write};
fn main() {
let mut stdin = io::stdin().lock();
let mut stdout = io::stdout().lock();
let mut input = String::new();
stdin.read_to_string(&mut input).unwrap();
let mut lines = input.lines();
let _n: usize = lines.next().unwrap().parse().unwrap();
let numbers: Vec<i32> = lines
.next()
.unwrap()
.split_whitespace()
.map(|s| s.parse().unwrap())
.collect();
let mut dp = vec![1; numbers.len()];
for i in 1..numbers.len() {
for j in 0..i {
if numbers[j] < numbers[i] {
dp[i] = dp[i].max(dp[j] + 1);
}
}
}
let max_len = dp.iter().max().unwrap();
write!(stdout, "{}", max_len).unwrap();
}
package problems.baekjoon.p11053
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.max
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val n = readLine()!!.toInt()
val inputs = readLine()!!.split(" ").map { it.toInt() }
val dp = MutableList(n) { 1 }
for (i in 1 until inputs.size) {
for (j in 0 until i) {
if (inputs[i] > inputs[j]) {
dp[i] = max(dp[i], dp[j] + 1)
}
}
}
println(dp.max())
close()
}