多校第六场 Apple Tree hdu 4925

来源:互联网 发布:c编程软件 编辑:程序博客网 时间:2024/06/07 04:48

题目的意思就是给定一个n乘m的地,共n乘m个网格,每个网格可以种苹果,但是只能结出一个果实,也可以施肥,施肥后该网格的上下左右四个若是种苹果,那么果实翻倍,问在一个n乘m的地最多可以收获多少苹果。

首先1x1的时候答案明显是1,如果n等于1或者m等于1,可得规律最多收获(n-1)*2个苹果,否则对n*m分奇偶,奇数时最佳方案必有4个网格结出4个苹果,再求出结出8个和16个的网格  最后向相加,偶数时结出4苹果的网格则只有2个。结出8个苹果的网格只会存在边缘,可以找规律,可种苹果的网格是n*m-n*m/2;

代码如下:

#include<stdio.h>#include<string.h>int main(){    int i,k,t,n,m,ans,s;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        if(n==1&&m==1)        {            printf("1\n");continue;        }        if(n==1) ans=2*m-2;        else if(m==1) ans=2*n-2;        else         {            s=2*n+(m-2)*2;            s=s/2;            ans=m*n-n*m/2;            if(n*m%2==1)            {                ans=16+(s-4)*8+16*(ans-s);            }            else            {                ans=8+(s-2)*8+16*(ans-s);            }        }        printf("%d\n",ans);    }    return 0;}

0 0
原创粉丝点击