Codeforces Round #45 B. Land Lot
問題概要
縦nマス横mマス(n,m≦50)のグリッドにわかれた長方形がある。
各マスに木が生えているかどうかが与えられる。
axbの長方形の家を立てるとき、切らなければならない木の本数を最小値を求めよ。
家は縦向きでも横向きでもかまわないものとする。
解法
n,mが小さいのでループをまわしてナイーブに判定すればよい。
ソースコード
void run() { int n,m,a,b,in[50][50]; cin>>n>>m; rep(i,n)rep(j,m)cin>>in[i][j]; cin>>a>>b; int ans=inf; rep(y,n)rep(x,m) { if(y+a<=n&&x+b<=m) { int c=0; rep(i,a)rep(j,b)c+=in[y+i][x+j]; ans=min(c,ans); } if(y+b<=n&&x+a<=m) { int c=0; rep(i,b)rep(j,a)c+=in[y+i][x+j]; ans=min(c,ans); } } cout<<ans<<endl; }