問題一覧 > 通常問題

No.2866 yuusaan's Knapsack

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 72
作問者 : yuusaan / テスター : 寝癖 👑 seekworser
0 ProblemId : 11195 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-09-25 11:19:43

ストーリー

ゆ~さんはしばらくしてナップサックを持って戻ってきました。

「驚いた。この世界には負の質量を持つものが存在するようだ。それ以外にも研究しがいのあるものがたくさんある。正直全部持ち帰りたいが...ナップサックが壊れたら元も子もないから壊れないギリギリで我慢しよう。

よし、持ち帰るものの候補にそれぞれ重要度を決めておくから、ナップサックに入りきるように重要度の合計をなるべく大きくしたときいくつになるか計算できるようにしておいてくれ。

そのとき、もし重要度の合計が最大となる選び方がいくつかあったら、その旨も教えて欲しい。」

問題文

ゆ~さんは耐久値 WW のナップッサックをもっています。

ゆ~さんはこのナップサックにいろいろな荷物を入れて入れた荷物の合計価値が最大になるようにしたいです。

ナップサックに入れる荷物の候補は NN 個存在し、順に荷物 11 ,荷物 22 ,...と番号がついています。

荷物には負の重さ負の価値を持つものが存在する可能性がありますが、重さの合計が 10000-10000 未満となる荷物の選び方は存在しないことが保証されます。

ここで、荷物 ii の価値は viv_i 、重さは wiw_i です。

ナップサックには 重さの合計が WW 以下になるように 00 個以上の荷物を入れるとしたとき、あり得る最大の合計価値および合計価値が最大となる荷物の入れ方の個数を求めてください。

ここで、重さの合計が WW 以下になる荷物の入れ方は必ず存在することが保証されます。

ただし、求める荷物の入れ方の個数はとても大きくなる可能性があるため、 998244353998244353 で割ったあまりを出力してください。

なお、二つの荷物の入れ方は、片方の入れ方では入っていてもう片方の入れ方では入っていない荷物が存在するとき、区別します。

入力

N WN\ W
v1 w1v_1\ w_1
v2 w2v_2\ w_2
\vdots
vN wNv_N \ w_N

制約

  • 1N1001\leq N \leq 100
  • W|W| 10000\leq 10000
  • wi|w_i| 10000\leq 10000
  • vi|v_i| 106\leq 10^6
  • 重さの合計が 10000-10000 未満になる物の選び方は存在しない
  • 重さの合計が WW 以下になる荷物の入れ方は必ず存在する
  • 入力は全て整数

出力

あり得る最大の合計価値と価値の合計が最大となる物の入れ方の個数をこの順で空白区切りで一行に出力して下さい。

ただし、価値の合計が最大となる物の入れ方の個数は 998244353998244353 で割ったあまりを出力する点に注意してください。

最後に改行してください。

サンプル

サンプル1
入力
5 10
4 3
2 1
5 5
4 4
3 3
出力
11 3

荷物 2,3,42,3,4 を入れる場合と荷物 1,2,31,2,3 を入れる場合、荷物 1,4,51,4,5 を入れる場合の 33 通りが価値の合計が 1111 となり最大です。

価値の合計が最大であれば重さの合計は関係なく「価値の合計が最大となる物の入れ方」です。

サンプル2
入力
2 0
-100 -100
500 100
出力
400 1

全ての荷物を入れる場合、重さの合計が 00 で、これは W=0W=0 以下となります。

サンプル3
入力
6 -2
6 5
1 -6
6 4
6 6
-3 -5
7 -2
出力
17 3

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。