题目的意思就是给定一个n乘m的地,共n乘m个网格,每个网格可以种苹果,但是只能结出一个果实,也可以施肥,施肥后该网格的上下左右四个若是种苹果,那么果实翻倍,问在一个n乘m的地最多可以收获多少苹果。
首先1x1的时候答案明显是1,如果n等于1或者m等于1,可得规律最多收获(n-1)*2个苹果,否则对n*m分奇偶,奇数时最佳方案必有4个网格结出4个苹果,再求出结出8个和16个的网格 最后向相加,偶数时结出4苹果的网格则只有2个。结出8个苹果的网格只会存在边缘,可以找规律,可种苹果的网格是n*m-n*m/2;
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i,k,t,n,m,ans,s;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
if(n==1&&m==1)
{
printf("1\n");continue;
}
if(n==1) ans=2*m-2;
else if(m==1) ans=2*n-2;
else
{
s=2*n+(m-2)*2;
s=s/2;
ans=m*n-n*m/2;
if(n*m%2==1)
{
ans=16+(s-4)*8+16*(ans-s);
}
else
{
ans=8+(s-2)*8+16*(ans-s);
}
}
printf("%d\n",ans);
}
return 0;
}