ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฌธ์ œ

 

11055๋ฒˆ: ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ˆ˜์—ด์˜ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘์—์„œ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} ์ธ ๊ฒฝ์šฐ์— ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜

www.acmicpc.net


โœ๐Ÿป ํ’€์ด

๐ŸŽจ Go

// https://www.acmicpc.net/problem/11055
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n int
	fmt.Fscanln(reader, &n)

	var a = make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscanf(reader, "%d ", &a[i])
	}

	fmt.Fprintln(writer, longestAscendingSequenceSum(a))
}

func longestAscendingSequenceSum(sequence []int) (maxSum int) {
	dp := make([]int, len(sequence)) // ๊ฐ ์š”์†Œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์„ ์ €์žฅํ•œ๋‹ค
	for i := 0; i < len(sequence); i++ {
		maxDp := 0
		for j := 0; j < i; j++ {
			if sequence[j] < sequence[i] { // j, i ์š”์†Œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์— ํ•ด๋‹นํ•  ๊ฒฝ์šฐ
				if maxDp < dp[j] {
					maxDp = dp[j] // j ์š”์†Œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํฌ๊ธฐ๋ฅผ maxDp์— ๊ฐฑ์‹ ํ•œ๋‹ค
				}
			}
		}
		dp[i] = maxDp + sequence[i]
		if maxSum < dp[i] {
			maxSum = dp[i]
		}
	}
	return
}

๐ŸŽจ Python3

# https://www.acmicpc.net/problem/11055
import sys

def longest_ascending_sequence_sum(sequence):
    dp = [0 for _ in range(len(sequence))]
    max_sum = 0
    for i in range(len(sequence)):
        max_dp = 0
        for j in range(i):
            if sequence[j] < sequence[i]:
                max_dp = max(max_dp, dp[j])
        dp[i] = max_dp+sequence[i]
        max_sum = max(max_sum, dp[i])
    return max_sum

if __name__ == "__main__":
    n = int(sys.stdin.readline())
    a = list(map(int, sys.stdin.readline().split()))
    print(longest_ascending_sequence_sum(a))
728x90
๋Œ“๊ธ€