Title Link: http://acm.hdu.edu.cn/showproblem.php?pid=4925
Apple TreeTime
limit:2000/1000 MS (java/others) Memory limit:262144/262144 K (java/others)
Total submission (s): 188 Accepted Submission (s): 129
Problem Descriptioni ' ve bought an orchard and decide to plant some apple trees on it. The orchard seems like an N * M two-dimensional map. In each grid, I can either plant a apple tree to get one apple or fertilize the soil to speed up its neighbors ' productio N. When a grid is fertilized, the grid itself doesn ' t produce apples and the number of apples of its four neighbor trees W Ill double (if it exists). For example, a apple tree locates on (x, Y), and (X-1, y), (x, y-1) is fertilized while (x + 1, y), (x, y + 1) is n OT, then I can get four apples from (x, y). Now, I am wondering how many apples I can get on the most in the whole orchard?
Inputthe input contains multiple test cases. The number of test cases T (t<=100) occurs in the first line of input.
For each test case, the integers N, M (1<=n, m<=100) is given in a line, which denote the size of the map.
Outputfor Each test case, you should output the maximum number of apples I can obtain.
Sample Input
22 23 3
Sample Output
832
Source2014 multi-university Training Contest 6
Recommendhujie | We have carefully selected several similar problems for you:4929 4928 4926 4924 4923
Statistic | Submit | Discuss | Note
Sign the question, nothing to say, black and white dyeing method is the best, the case of 1*1
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath > #include <string> #include <vector> #include <algorithm> #include <queue> #include < stack> #include <set> #include <map>using namespace std; #define CLR (a) memset (A,0,sizeof (a)) int a[110][ 110];int Main () {int t,m,n; cin>>t; while (t--) {cin>>n>>m; if (n==1 && m==1) {cout<<1<<endl; Continue } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) a[i][j]=1; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) {if (a[i][j]==1) {a[i-1][j]& lt;<=1; a[i+1][j]<<=1; a[i][j-1]<<=1; a[i][j+1]<<=1; }} long long sum=0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { if (a[i][j]!=1) {sum+=a[i][j]; }} cout<<sum<<endl; } return 0;}