No.1818 6 Operations
レベル : / 実行時間制限 : 1ケース 2.500秒 / メモリ制限
: 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 47
作問者 : nok0 / テスター : Forested riano
タグ : / 解いたユーザー数 47
作問者 : nok0 / テスター : Forested riano
問題文最終更新日: 2022-01-23 11:10:06
問題文
長さ $N$ の非負整数列 $A$ と長さ $M$ の非負整数列 $B$ が与えられます。
あなたは、以下の $6$ 種類の操作を好きな順序で好きな回数繰り返すことができます。
- $i\ (1 \le i \le |A|)$ を選ぶ。 $A_i$ の値を $A_i+1$ で置き換える。
- $i\ (1 \le i \le |A|)$ を選ぶ。 $A_i$ の値を $A_i-1$ で置き換える。
- $i\ (1 \le i \le |A| - 1)$ を選ぶ。 $A_i$ の値を $A_i+A_{i+1}$ で置き換え、 $A_{i+1}$ を削除する。
- $i\ (1 \le i \le |A| - 1)$ を選ぶ。 $A_i$ の値を $A_i+A_{i+1}+1$ で置き換え、 $A_{i+1}$ を削除する。
- $i\ (1 \le i \le |A|)$ 及び非負整数 $x$ を選ぶ。 $A_i$ の値を $A_i-x$ で置き換え、 $A_i$ の直後に $x$ を挿入する。
- $i\ (1 \le i \le |A|)$ 及び非負整数 $x$ を選ぶ。 $A_i$ の値を $A_i-x-1$ で置き換え、 $A_i$ の直後に $x$ を挿入する。
ただし、操作のどの瞬間においても、数列 $A$ の要素は全て非負でなくてはなりません。
数列 $A$ を数列 $B$ に一致させるために必要な操作回数の最小値を求めてください。
制約
- 入力は全て整数である。
- $1 \le N \le 10^3$
- $1 \le M \le 10^3$
- $0 \le A_i$
- $0 \le B_i$
- $\sum_{i=1}^N A_i \le 3\times 10^3$
- $\sum_{i=1}^M B_i \le 3\times 10^3$
入力
$N$ $M$ $A_1$ $A_2$ $\dots$ $A_N$ $B_1$ $B_2$ $\dots$ $B_M$
出力
$A$ と $B$ を一致させるために必要な操作回数の最小値を出力してください。
サンプル
サンプル1
入力
3 2 3 1 4 1 5
出力
3
以下では便宜上、問題文で与えられた操作を上から順に 操作 $1$、操作 $2$、$\dots$、 操作 $6$ と呼びます。
下記の通りに操作を行うことで、 $3$ 回の操作で $A$ と $B$ を一致させることが可能です。
- 操作 $2$ で $i=1$ を選ぶ。その結果 $A=(2,1,4)$ となる。
- 操作 $2$ で $i=1$ を選ぶ。その結果 $A=(1,1,4)$ となる。
- 操作 $3$ で $i=2$ を選ぶ。その結果 $A=(1,5)=B$ となる。
$3$ 回未満の操作で $A$ と $B$ を一致させることは不可能なことが証明できるので、答えは $3$ となります。
サンプル2
入力
1 1 0 3000
出力
3000
サンプル3
入力
6 5 2 7 1 8 2 8 1 8 2 8 4
出力
8
下記の通りに操作を行うことで、 $8$ 回の操作で $A$ と $B$ を一致させることが可能です。
- 操作 $2$ で $i=6$ を選ぶ。その結果 $A=(2,7,1,8,2,7)$ となる。
- 操作 $2$ で $i=6$ を選ぶ。その結果 $A=(2,7,1,8,2,6)$ となる。
- 操作 $2$ で $i=6$ を選ぶ。その結果 $A=(2,7,1,8,2,5)$ となる。
- 操作 $2$ で $i=6$ を選ぶ。その結果 $A=(2,7,1,8,2,4)$ となる。
- 操作 $3$ で $i=2$ を選ぶ。その結果 $A=(2,8,8,2,4)$ となる。
- 操作 $2$ で $i=1$ を選ぶ。その結果 $A=(1,8,8,2,4)$ となる。
- 操作 $5$ で $i=3,x=2$ を選ぶ。その結果 $A=(1,8,2,6,2,4)$ となる。
- 操作 $3$ で $i=4$ を選ぶ。その結果 $A=(1,8,2,8,4)=B$ となる。
$8$ 回未満の操作で $A$ と $B$ を一致させることは不可能なことが証明できるので、答えは $8$ となります。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。