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;
}