atcoder#ABC159F. [ABC159F] Knapsack for All Segments

[ABC159F] Knapsack for All Segments

配点 : 600600

問題文

長さ NN の整数列 A1A_1, A2A_2, \ldots, ANA_N と正の整数 SS が与えられます。 1LRN1\leq L \leq R \leq N をみたす整数 (L,R)(L, R) の組について、f(L,R)f(L, R) を以下のように定めます。

  • Lx1<x2<<xkRL \leq x_1 < x_2 < \cdots < x_k \leq R かつ Ax1+Ax2++Axk=SA_{x_1}+A_{x_2}+\cdots +A_{x_k} = S を満たすような整数列 (x1,x2,,xk)(x_1, x_2, \ldots , x_k) の個数

1LRN1\leq L \leq R\leq N を満たす整数 (L,R)(L, R) の組すべてに対する f(L,R)f(L, R) の和を求めてください。ただし、答えは非常に大きくなることがあるので、998244353998244353 で割ったあまりを出力してください。

制約

  • 入力は全て整数である。
  • 1N30001 \leq N \leq 3000
  • 1S30001 \leq S \leq 3000
  • 1Ai30001 \leq A_i \leq 3000

入力

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

NN SS

A1A_1 A2A_2 ...... ANA_N

出力

f(L,R)f(L, R) の和を 998244353998244353 で割ったあまりを出力せよ。

3 4
2 2 4
5

それぞれ以下のように計算できて、その和は 55 です。

  • f(1,1)=0f(1,1) = 0
  • f(1,2)=1f(1,2) = 1 ((1,2)(1, 2)11 つ)
  • f(1,3)=2f(1,3) = 2 ((1,2)(1, 2)(3)(3)22 つ)
  • f(2,2)=0f(2,2) = 0
  • f(2,3)=1f(2,3) = 1 ((3)(3)11 つ)
  • f(3,3)=1f(3,3) = 1 ((3)(3)11 つ)
5 8
9 9 9 9 9
0
10 10
3 1 4 1 5 9 2 6 5 3
152