嗯。。我们队的宗旨,每次撸一道题。。。会不会太水了点。。。
水题,可以说是找规律的题。
题目大意:给你n*m的土地,每个格子里面你可以选择施肥或者种树,若是施肥,则在当前位置的上下左右四个方向中,若有树,则树的产量会加倍,求可以获得的最大的苹果数。
会发现可以以2*2为单位进行放置,方案是一样的。所以每次都是:
1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1表示施肥,0表示种树。然后就出来啦。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int map[102][102];
int t;
int main()
{
scanf("%d",&t);
while(t--)
{
int ans=0;
int n,m;
cin>>n>>m;
if(n==1&&m==1)
{
cout<<"1"<<endl;
continue;
}
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i%2&&j%2)
{
map[i][j]=1;
//cout<<i<<" "<<j<<endl;
}
if(!(i%2||j%2))
{
map[i][j]=1;
//cout<<i<<" "<<j<<endl;
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int tim=0;
if(map[i][j]==0)
{
if(map[i-1][j])
tim++;
if(map[i+1][j])
tim++;
if(map[i][j+1])
tim++;
if(map[i][j-1])
tim++;
ans+=1<<tim;
}
}
cout<<ans<<endl;
}
return 0;
}