http://acm.hdu.edu.cn/showproblem.php?pid=4925
尽量让每棵苹果树周围都施肥,每次找到一个空地种上苹果树之后,使其周围的空地施肥,不再种苹果树。
#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL long long
#define _LL __int64
#define eps 1e-12
#define PI acos(-1.0)
#define C 240
#define S 20
using namespace std;
int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
int Pow[5] = {1,2,4,8,16};
int main()
{
int test;
int n,m;
int a[110][110];
scanf("%d",&test);
while(test--)
{
scanf("%d %d",&n,&m);
memset(a,-1,sizeof(a));
int ans = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(a[i][j] == -1)
{
int cnt = 0;
a[i][j] = 0;
for(int k = 0; k < 4; k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x >= 1 && x <= n && y >= 1 && y <= m)
{
if(a[x][y] == -1 || a[x][y] == 1)
{
cnt++;
a[x][y] = 1;
}
}
}
ans += Pow[cnt];
}
}
}
printf("%d\n",ans);
}
return 0;
}