atcoder#AGC054B. [AGC054B] Greedy Division

[AGC054B] Greedy Division

配点 : 800800

問題文

みかんが NN 個あり,11 から NN までの番号がついています. みかん ii の重さは WiW_i です. 高橋くんと青木くんがこれらを以下のようにして分けます.

  • (1,2,,N)(1,2,\cdots,N) の順列 (p1,p2,,pN)(p_1, p_2, \cdots, p_N) を選ぶ.
  • i=1,2,,Ni = 1, 2, \cdots, N について,この順に以下のことを行う
    • 高橋くんがすでにとったみかんの重さの合計が,青木くんがすでにとったみかんの重さの合計以下なら,みかん pip_i を高橋くんがとる. そうでないならみかん pip_i を青木くんが取る.
  • 高橋くんがすでにとったみかんの重さの合計が,青木くんがすでにとったみかんの重さの合計以下なら,みかん pip_i を高橋くんがとる. そうでないならみかん pip_i を青木くんが取る.

最終的に二人が取るみかんの重さの合計が等しくなるような順列 pp が何通りあるかを 998244353998244353 で割った余りを求めてください.

制約

  • 2N1002 \leq N \leq 100
  • 1Wi1001 \leq W_i \leq 100
  • 入力される値はすべて整数

入力

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

NN

W1W_1 W2W_2 \cdots WNW_N

出力

答えを出力せよ.

3
1 1 2
4

条件を満たす pp は,(1,3,2),(2,3,1),(3,1,2),(3,2,1)(1,3,2),(2,3,1),(3,1,2),(3,2,1)44 通りです. 例えば,p=(3,2,1)p=(3,2,1) の時は,以下のように進行します.

  • i=1i=1: 高橋くんがすでにとったみかんの重さの合計は 00 で,青木くんがすでにとったみかんの重さの合計は 00 である. 高橋くんがみかん pi=3p_i=3 をとる.
  • i=2i=2: 高橋くんがすでにとったみかんの重さの合計は 22 で,青木くんがすでにとったみかんの重さの合計は 00 である. 青木くんがみかん pi=2p_i=2 をとる.
  • i=3i=3: 高橋くんがすでにとったみかんの重さの合計は 22 で,青木くんがすでにとったみかんの重さの合計は 11 である. 青木くんがみかん pi=1p_i=1 をとる.

よって p=(3,2,1)p=(3,2,1) は条件を満たす順列です.

4
1 2 3 8
0
20
2 8 4 7 5 3 1 2 4 1 2 5 4 3 3 8 1 7 8 2
373835282