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
Authorbupt
For this problem, I just want to say, push it, Junior!
#include <stdio.h> #include <string.h> #include <algorithm>using namespace Std;__int64 a[105][105]; void set () { int i,j; A[1][1] = 1; A[2][2] = 8; A[1][2] = 2; for (i = 3;i<=100;i++) a[i][i] = (8* (i-1) * (i-1)); for (i = 1;i<=100;i++) {for (j = i+1;j<=100;j++) { if (i = = 1) { if (j = = 2) Continue; else a[i][j] = a[i][j-1]+2; } else a[i][j] = a[i][j-1]+a[i][i]/(i-1);}} } int main () { set (); int t,n,m; scanf ("%d", &t); while (t--) { scanf ("%d%d", &n,&m); if (n>m) swap (n,m); printf ("%i64d\n", A[n][m]); } return 0;}