[Swift]白駿から1740-RGB 2
1587 ワード
問題のショートカット
RGB距離の問題を解決したら、これはとても役に立つ問題です...!
RGB距離プール
だって、ドアを付けて、1軒目の家の値をそれぞれR、G、Bに指定すれば、考えられるから!
だから….
最初に最初の家の値をRに指定した場合.
dp[1][0] = R
dp[1][1] = MAX
dp[1][2] = MAX
最初のセットの値がRでない場合、最小値は絶対に表示されません.
その後、RGB距離解と同じ最小値を求める.
最初の家の値がRなので、最後の家の値はRではありません.
dpを除いて[N][0]
dp[N][1]とdp[N][2]で最小値を求める.
最初の家の値がGであれば、この過程を繰り返すこともできます.
最終的に求めた最小値を出力すればよい
(ブラシ住宅のコストは最高1000で、住宅数は2~1000の間にあるため、最大可能値MAX=1000 x 1000+1)
最終回答
import Foundation
let N = Int(readLine()!)!
let max = 1000*1000 + 1
var nArray = Array(repeating: Array(repeating: 0, count: 3), count: N+1)
var dp = Array(repeating: Array(repeating: 0,count: 3), count: N+1)
var result = max
for i in 1...N {
let a = readLine()!.split(separator: " ").map{Int(String($0))!}
nArray[i] = a
}
for j in 0..<2 {
let a = (j+1)%3
let b = (j+2)%3
dp[1][j] = nArray[1][j]
dp[1][a] = MAX
dp[1][b] = MAX
for i in 2...N {
dp[i][0] = nArray[i][0] + min(dp[i-1][1], dp[i-1][2])
dp[i][1] = nArray[i][1] + min(dp[i-1][0], dp[i-1][2])
dp[i][2] = nArray[i][2] + min(dp[i-1][0], dp[i-1][1])
}
result = min(result, dp[N][a], dp[N][b])
}
print(result)
jに1と2を加えた値を3の余数で割った.
Reference
この問題について([Swift]白駿から1740-RGB 2), 我々は、より多くの情報をここで見つけました https://velog.io/@sun02/Swift-백준-17404-RGB-거리-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol