atcoder#ABC275F. [ABC275F] Erase Subarrays

[ABC275F] Erase Subarrays

题目描述

正整数列 A=(a1,a2,,aN) A=(a_1,a_2,\ldots,a_N) が与えられます。
あなたは次の操作を 0 0 回以上何度でも繰り返せます。

  • A A から(空でない)連続する部分列を選び、削除する。

x=1,2,,M x=1,2,\ldots,M に対し、次の問題を解いてください。

  • A A の要素の総和をちょうど x x にするために必要な操作回数の最小値を求めてください。ただし、どのように操作を行っても A A の要素の総和をちょうど x x にできない場合は代わりに -1 と出力してください。

なお、A A が空である時、A A の要素の総和は 0 0 であるとします。

输入格式

入力は以下の形式で標準入力から与えられる。

N N M M a1 a_1 \ldots aN a_N

输出格式

M M 行出力せよ。i i 行目には x=i x=i に対する答えを出力せよ。

题目大意

给出一个长度为 nn 的数组,问是否能通过删掉一些子段使剩下的数之和为 qq

若可以,求出最小操作次数,否则输出 1-1

对于所有的 q[1,m]q\in[1,m] 回答这个问题,第 ii 行输出 q=iq=i 时的答案,每个问题互不影响。

样例解释:

在样例 11 中,

q=1q=1 时删去 a2,a3,a4a_2,a_3,a_4,答案为 11

q=2q=2 时先删去 a1a_1,再删去 a3,a4a_3,a_4,答案为 22

q=3q=3 时删去 a3,a4a_3,a_4,答案为 11

q=4q=4 时删去 a1,a2,a3a_1,a_2,a_3,答案为 11

q=5q=5 时删去 a2,a3a_2,a_3,答案为 11

4 5
1 2 3 4
1
2
1
1
1
1 5
3
-1
-1
0
-1
-1
12 20
2 5 6 5 2 1 7 9 7 2 5 5
2
1
2
2
1
2
1
2
2
1
2
1
1
1
2
2
1
1
1
1

提示

制約

  • 1  N,M  3000 1\ \leq\ N,M\ \leq\ 3000
  • 1  ai  3000 1\ \leq\ a_i\ \leq\ 3000
  • 入力はすべて整数

Sample Explanation 1

操作回数が最小である操作の例を以下に示します。 - x=1 x=1 について、a2,a3,a4 a_2,a_3,a_4 に対して操作をすることで A A の要素の総和が x x になります。 - x=2 x=2 について、a3,a4 a_3,a_4 に対して操作をした後、a1 a_1 に対して操作をすることで A A の要素の総和が x x になります。 - x=3 x=3 について、a3,a4 a_3,a_4 に対して操作をすることで A A の要素の総和が x x になります。 - x=4 x=4 について、a1,a2,a3 a_1,a_2,a_3 に対して操作をすることで A A の要素の総和が x x になります。 - x=5 x=5 について、a2,a3 a_2,a_3 に対して操作をすることで A A の要素の総和が x x になります。