题目意思
有N*M的一块地,每个里面可以种苹果树(每个涨一个苹果)或者施肥,施肥会对周围四棵果树产量翻倍,如开始只是长一个苹果,一块影响为2,两块影响为4,三块8,四块16,最多就是周围四个都施肥,产量为16
问最多可以有多少产量?
解析
我们发现最多的产量是下面这种形式(1表示种树,0表示施肥):
那么这样我们就可以发现,只有四个角上产量为4,除了四个角边上产量为8,中间产量都为16,那么我们还需要特别判断N或者M为1的情况,因为里面只有2和4的情况,不存在产量为8的情况
或者先生成上面的表,然后判断每个种树位置上下左右有多少施肥也好
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstring>
#define ll long longusing namespace std;int main()
{int T;scanf("%d",&T);int n,m;while(T--){scanf("%d%d",&n,&m);ll ans = 0;if( n == 1 && m== 1){printf("1n");continue;}else if(n == 1 || m == 1){int ans = 0;int x = n > m? n : m;for(int i = 1;i <= x;i += 2){if(i == 1 || i == x)ans += 2;elseans += 4;}printf("%dn",ans);}else{for(int i = 1;i <= n;i ++){int j = i % 2 == 1 ? 1 : 2;for(;j <= m;j += 2){if((i == 1&&j == 1)||(i == 1 && j == m) || (i == n && j == 1) || (i == n && j == m))ans += 4;else if(i == 1 || j == 1 || i == n || j == m)ans += 8;elseans += 16;}}printf("%dn",ans);}}
}
本文发布于:2024-01-30 12:42:46,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170658976820071.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |