嗯。。我们队的宗旨,每次撸一道题。。。会不会太水了点。。。
水题,可以说是找规律的题。
题目大意:给你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; }