kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

ALDS1_6_D: Minimum Cost Sort

ちょっと時間がない

普通にソートしてみてからその結果に持っていけるように交換順序を考える

重いものから順に正しい位置へ

で1次近似しよう

サンプルデータふたつはこれでも正しい値が出るはず
データがよくない気もするけど

ソートとサーチは素直にライブラリ関数を使った
O(n2)

def swap(w, i, j):
    tmp = w[i]
    w[i] = w[j]
    w[j] = tmp

def min_weight(w):
    ws = sorted(w)
    weight = 0
    for i in reversed(range(len(w))):
        j = w.index(ws[i])
        if i != j:
            weight += w[i] + w[j]
            swap(w, i, j)
    return weight

def main():
    n = int(input())
    w = [int(x) for x in input().split()]
    print(min_weight(w))

main()

はい3つめのデータでWA
テストデータだとこれが48

4
10 7 8 9

上のプログラムだと51
10↔9、9↔8、8↔7という手順

48はどういう手順かな
7↔8、7↔9、7↔10でいいのか
うーん大きな数から正しい位置に、という戦略がそもそもダメってことか