問題
正整数 $ N, M, Q $ と、4つの整数の組( $ a_i, b_i, c_i, d_i $ )が $ Q $ 組与えられます。
以下の条件を満たす長さ $ N $ の整列 $ A_1, A_2, …, A_N $ (数列の添字は 1 始まり)を考えます。
🔹 $ A_i $ は正の整数
🔹 $ 1 \leqq A_1 \leqq A_2 \leqq … \leqq A_n \leqq M $
この数列のスコアを「 $ A_{b_i} - A_{a_i} = c_i $ を満たす $ i $ について $ d_i $ の総和 」とします。
数列 $ A $ の最大スコアを求めて下さい。
解法・ソースコード
この問題は、数列 $ A $ を全探索 すれば解くことができます。
次の条件を満たす長さ $ N $ の数列を全列挙します。
🔹 $ 1 \leqq A_i \leqq M $
🔹 $ A_1 \leqq A_2 \leqq … \leqq A_N $
この数列に対しスコアを計算し、最大値を出力すればよいことになります。
数列の全列挙には combinations_with_replacement関数 を使っています。(24行目)
[Google Colaboratory]
1 | from itertools import combinations_with_replacement |
[実行結果]
(1, 1, 1) 0 (1, 1, 2) 0 (1, 1, 3) 10 (1, 1, 4) 100 (1, 2, 2) 0 (1, 2, 3) 0 (1, 2, 4) 110 (1, 3, 3) 10 (1, 3, 4) 110 (1, 4, 4) 100 (2, 2, 2) 0 (2, 2, 3) 0 (2, 2, 4) 10 (2, 3, 3) 0 (2, 3, 4) 0 (2, 4, 4) 10 (3, 3, 3) 0 (3, 3, 4) 0 (3, 4, 4) 0 (4, 4, 4) 0 ------------------ 解(最大値): 110
$ A = [1, 2, 4] $ または $ A = [1, 3, 4] $ とする場合に最大となり、この数列のスコアは 110点 となります。