問題一覧 > 通常問題

No.2869 yuusaan's Knapsacks

レベル : / 実行時間制限 : 1ケース 4.500秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 43
作問者 : yuusaan / テスター : 寝癖 👑 seekworser
0 ProblemId : 11204 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-09-25 11:20:49

注意点

実行時間制限が厳しいため、高速な言語の使用を推奨します。

ストーリー

あなたはまたゆ~さんに連れられて並行世界にやってきました。

「じゃあまたここで見つけたものに対して重要度を決めておくから、ナップサックに入れられる範囲での重要度の合計の最大値を計算できるようにしておいてね。

今回は負の質量を持つ物体はいらないんだけど...それ以外のものをいっぱい入れたいからナップサックをたくさん持ってきたんだ。

あ、そうだ。ついでにものをどう入れたらいいかも教えてくれるようにコードを書いてくれ。」

問題文

NN 個のナップサックと MM 個の荷物があります。各ナップサックには 11 から NN までの、各荷物には 11 から MM までの番号が振られています。

ここで、各整数 i,j(1iN,1jM)i,j(1\leq i \leq N,1\leq j \leq M) について、ナップサック ii の耐久値は eie_i で、荷物 jj の価値は vjv_j 、重さは wjw_j です。

ゆ~さんは各ナップサックに 00 個以上の荷物を入れます。このとき、全てのナップサックについて、入れた荷物の合計の重さが耐久値を上回ってはいけません。

また、一つの荷物を複数のナップサックに入れることもできません。

上記の条件を満たす荷物の入れ方で、ナップサックに入れられた荷物の合計価値としてあり得る最大値を求めてください。

また、その合計価値が最大となる荷物の入れ方を一つ示してください。(具体的な出力については「出力」の項目を参照してください。)

(この問題において、eie_i はネイピア数を表す記号ではない点に注意してください。)

入力

N MN\ M
e1 e2 e3eNe_1\ e_2 \ e_3 \dots e_N
v1 w1v_1\ w_1
v2 w2v_2\ w_2
\vdots
vM wMv_M\ w_M

制約

  • 1NM1\leq N \leq M
  • 1M1\leq M \leq 1616
  • 1ei1091\leq e_i \leq 10^9
  • 1wi1091\leq w_i\leq 10^9
  • 1vi1071\leq v_i \leq 10^7
  • 入力はすべて整数

出力

N+1N+1 行出力して下さい。

11 行目にはナップサックに入れる荷物の価値の合計としてあり得る最大値を、

22 行目以降には、荷物の価値の合計が最大となる荷物の入れ方の一つを出力してください。

より具体的には、その荷物の入れ方の一つについて、i+1i+1 行目には、ナップサック ii に入れる荷物の個数と、入れる荷物の番号全てをこの順に空白区切りで出力してください。

条件を満たす解が複数ある場合、どれを出力しても正解となります。

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

サンプル

サンプル1
入力
3 5
5 2 3
2 2
3 2
5 3
3 3
3 4
出力例
13
2 1 3
1 2
1 4

荷物 1,31,3 をナップサック 11 に、荷物 22 をナップサック 22 に、荷物 44 をナップサック 33 に入れると、価値の合計は 1313 となり、これが最大です。

他にも、荷物 2,42,4 をナップサック 11 に、荷物 11 をナップサック 22 に、荷物 33 をナップサック 33 に入れるといった入れ方なども正解となります。

サンプル2
入力
5 5
10 15 20 25 30
100 50
100 50
100 50
100 50
100 50
出力例
0
0
0
0
0
0

どの荷物も重すぎるので、一つもナップサックに入れることはできません。

サンプル3
入力
5 6
4 7 1 2 1
23 2
14 5
72 7
21 2
35 3
12 1
出力例
142
2 5 6
1 3
0
1 1
0

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