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()
}