[AtCoder] ABC 140 C – Maximal Value
問題
方針
条件を具体的に書き出すと、
\[\begin{eqnarray}
\max(A_1, A_2) &\leq& B_1\\
\max(A_2, A_3) &\leq& B_2\\
&\vdots&\\
\max(A_{N-2}, A_{N-1}) &\leq& B_{N-2}\\
\max(A_{N-1}, A_N) &\leq& B_{N-1}\\
\end{eqnarray}
\]
となり、\( A_1 \) と \( A_N \) は不等式の制約が一つであることが分かります。よって、\( A_1 = B_1 \), \( A_N = B_{N-1}\) のとき総和を最大化します。その他のものについて考えると、\( A_2 \) については、
\[
A_2 \leq B_1 \wedge \max(A_2, A_3) \leq B_2
\]
なので、\( A_2 = \min(B_1, B_2) \) となります。同様に考えて、\( A_i = \min(B_{i-1}, B_{i}) \ (2 \leq i \leq N – 1)\) となります。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int N; cin >> N; ll B[N - 1]; for (int i = 0; i < N - 1; i++) { cin >> B[i]; } ll sum = B[0] + B[N - 2]; for (int i = 0; i < N - 2; i++) { sum += min(B[i], B[i + 1]); } cout << sum << "\n"; return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません