AtCoder Beginner Contest 005

D - おいしいたこ焼きの焼き方


Time limit時間制限 : 5sec / Memory limitメモリ制限 : 256MB

問題文

高橋君のたこ焼き屋で使っているたこ焼き器は焼く場所によって美味しさの変わるクセの強いたこ焼き器です。
また、店員の力量によって一度に焼けるたこ焼きの数が違います。
高橋君はそれぞれの店員ができるだけ美味しくたこ焼きを焼けるようにしようと思いました。

たこ焼き器はN×Nの正方形をしています。
それぞれの場所ごとにたこ焼きの美味しさDijが決まっています。
それぞれの店員は一度に焼けるたこ焼きの上限Pkが決まっています。
また、一度に焼くたこ焼きは必ずたこ焼き器の長方形の部分になっていて、その中の全てを使わなければなりません。
それぞれの店員について一度に焼けるたこ焼きの美味しさの合計の最大値を求めて下さい。
ただし、店員が焼き始める時はたこ焼き器が完全に空いていてどの場所でも使えるとします。

入力

入力は以下の形式で標準入力から与えられる。
N
D11 D12 ... D1N
D21 D22 ... D2N
...
DN1 DN2 ... DNN
Q
P1
P2
...
PQ
  • 1行目にたこ焼き器の一辺の大きさを表す整数N(1≦N≦50)が与えられます。
  • 続くN行にたこ焼き器のそれぞれの場所で焼けるたこ焼きの美味しさを表す整数Dij(1≦Dij≦100)が与えられます。
  • 次の行に店員の人数を表す整数Q(1≦Q≦N2)が与えられます。
  • 続くQ行にそれぞれの店員が焼けるたこ焼きの数を表す整数Pk(1≦Pk≦N2)が与えられます。

出力

それぞれの店員について一度に焼けるたこ焼きの美味しさの合計の最大値を出力して下さい。
また、出力の末尾には改行を入れて下さい。

部分点

1≦N≦5を満たすテストケース全てに正解すると、100点満点のうち 50点が与えられる。


入力例 1

3
3 2 1
2 2 1
1 1 1
3
1
4
9

出力例 1

3
9
14
  • 1人目の店員は左上でたこ焼きを焼くと美味しさの合計が3になります。
  • 2人目の店員は左上の2×2の範囲でたこ焼きを焼くと美味しさの合計が9になります。
  • 3人目の店員はたこ焼き器全てを使えるので美味しさの合計が14になります。
これは部分点に含まれる入力になります。

入力例 2

3
1 1 1
1 1 1
9 9 9
1
4

出力例 2

27
  • 一番下の列の範囲1×3でたこ焼きを焼くと美味しさの合計が27になります。
  • この店員はたこ焼きを4個焼くことができますが、3個しか焼かないほうが美味しさの合計が大きくなります。
これは部分点に含まれる入力になります。

Submit提出する