結果

問題 No.2473 Fraises dans une boîte
ユーザー 👑 SPD_9X2
提出日時 2023-07-17 21:21:12
言語 PyPy3
(7.3.15)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 3,442 bytes
コンパイル時間 254 ms
コンパイル使用メモリ 82,432 KB
実行使用メモリ 83,732 KB
最終ジャッジ日時 2024-11-07 08:40:50
合計ジャッジ時間 25,262 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 36 RE * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

"""
Fraises dans une boîte(6)
6ver
"""
import sys
from sys import stdin
H,W = map(int,stdin.readline().split())
S = [list(map(int,stdin.readline().split())) for i in range(H)]
#
assert 1 <= H <= 22
assert 1 <= W <= 22
assert len(S) == H
for s in S:
assert len(s) == W
for i in s:
assert i == 0 or i == 1
# 2
SSum = [[0] * (W+1) for i in range(H+1)]
for i in range(H):
for j in range(W):
SSum[i+1][j+1] += S[i][j]
for i in range(H):
for j in range(W+1):
SSum[i+1][j] += SSum[i][j]
for i in range(H+1):
for j in range(W):
SSum[i][j+1] += SSum[i][j]
# 4list
inf = float("inf")
lis = [[[[0] * (W+1) for i in range(W+1)] for j in range(H+1)] for k in range(H+1)]
# dp
for hsize in range(1,H+1): #調
for wsize in range(1,W+1): #調
for x1 in range(H): #x
x2 = x1 + hsize
if x2 > H:
break
for y1 in range(W): #y
y2 = y1 + wsize
if y2 > W:
break
#
now_ans = inf
#
zerox = [0]
zeroy = [0]
for tmpx in range(x1,x2):
nsum = 0
for tmpy in range(y1,y2):
nsum += S[tmpx][tmpy]
if nsum == 0:
pl = 1
else:
pl = 0
zerox.append(zerox[-1] + pl)
for tmpy in range(y1,y2):
nsum = 0
for tmpx in range(x1,x2):
nsum += S[tmpx][tmpy]
if nsum == 0:
pl = 1
else:
pl = 0
zeroy.append(zeroy[-1] + pl)
#print (zerox,zeroy)
for xmid in range(x1,x2+1):
for ymid in range(y1,y2+1):
#0
if SSum[x2][y2] - SSum[xmid][y2] - SSum[x2][ymid] + SSum[xmid][ymid] != 0:
continue
#0
if (xmid-x1) * (ymid-y1) == 0 and (x2-xmid) * (y2-ymid) == 0:
continue
cost = 0
# 1
lu1 = SSum[xmid][ymid] - SSum[xmid][y1] - SSum[x1][ymid] + SSum[x1][y1]
cost += (xmid-x1-zerox[xmid-x1]) * (ymid-y1-zeroy[ymid-y1]) - lu1
#
cost += lis[xmid][x2][y1][ymid] + lis[x1][xmid][ymid][y2]
#
#print (x1,xmid,x2,y1,ymid,y2,cost)
now_ans = min(now_ans , cost)
lis[x1][x2][y1][y2] = now_ans
#
#print (x1,x2,y1,y2,now_ans)
print (lis[0][H][0][W])
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0