Tenka1 Programmer Contest-C:Align(400)
問題
https://beta.atcoder.jp/contests/tenka1-2018/tasks/tenka1_2018_c
要素の数列
が与えられる。
を任意の順番に並べ替えて隣接項の差の合計を最大にするとき、最大値を求めよ。
考え方
隣接項の差をなるべく大きくするには以下のように数列を並べ替える必要がある。
偶奇で場合分けする。偶奇で考えることは同様なので、奇数の場合のみ考える。
とする。考えうる数列は
である。このときの差を計算すると、それぞれ以下のようになる。
それぞれ計算すると各要素と係数の関係は以下のようになる。
|
|||||
---|---|---|---|---|---|
|
|
|||||
---|---|---|---|---|---|
|
よって、 をソートして、小さい要素から順番に各係数をかけてゆけば最大値を求めることができる。
Nが奇数の場合も同様である。
ポイント
- 考えられる場合を考えて、立式をする(なんとなくで求めない)