[アルゴリズム]プログラマー-縄張りを奪う


プログラマー-縄張りを奪う

説明する

def solution(land):
    dp = [[0] * len(land[0]) for _ in range(len(land))]
    dp[0] = copy.deepcopy(land[0])
    for i in range(1, len(land)):
        for j in range(len(land[0])):
            if j == 0:
                dp[i][j] = max(dp[i-1][1:]) + land[i][j]
            elif j == len(land[0]) - 1:
                dp[i][j] = max(dp[i-1][:j]) + land[i][j]
            else:
                dp[i][j] = max(max(dp[i-1][:j]), max(dp[i-1][j+1:])) + land[i][j]

    return max(max(dp))
そんなに難しい問題はありません.前の行では、同じ列でない最大値を加算します.
コードを書くときに知ったのですが、2次元配列であればmax(arr)と書くと、2次元配列で最大の値が出てきます.

他人を解く

def solution(land):

    for i in range(1, len(land)):
        for j in range(len(land[0])):
            land[i][j] = max(land[i -1][: j] + land[i - 1][j + 1:]) + land[i][j]

    return max(land[-1])
プーリを使用する場合、プーリの結果がない場合があるため、maxを直接書き込むのは難しいが、この解答ではjが0なのかmallなのか、それ以外に、リストを追加してmaxを直接書き込むことができる.