BOJ 13305:ガソリンスタンド


13305:ガソリンスタンド

に答える


この問題は以下の流れで解くのが簡単です.
  • ノードを一方的に巡回し、最低値を持つノードの重み値を記憶する
  • 同一インデックスにおける{幹線重み}x{ノードの最小重み}値を求め、結果変数に追加する
  • この問題を解決する際,注意すべき部分は一方向巡回範囲を指定する部分と見なすことができる.
    問題の条件から見ると、
  • ノード数=4
  • 幹線の本数=3
  • 「初めての出発でガソリンが切れたのでガソリンスタンドから給油して出発」
  • 上記の条件の3番の条件に従って繰り返し文に入る前に、まず最初のノードと最初の幹線のデータを計算します.
    また、最後のノードについては、次のノードまでの幹線はありません.
    無視できます.
    したがって、実際には、繰り返し文が実行する範囲は
    赤い枠で表される部分index 1~2の部分となります.
    この点に注意し、コードで実装します.
    (コードはPython 3構文に従う)
    n = int(input())
    load = list(map(int, input().split()))
    node = list(map(int, input().split()))
    
    m = node[0]
    res = m * load[0]
    
    for i in range(1, n-1):
        if node[i] < m:
            m = node[i]
        res += (m*load[i])
    print(res)