题意:给你一个n*m的棋盘,问你最多可以放几个马,他们之间互不攻击。
x=min(n,m),y=max(n,m)
当x=1时,输出y。
当x=2时,输出我们可以放若干个田字。
当x>2时,我们全放在白格子或者黑格子上面。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
int main()
{
int t,cas=1;scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
int o=min(n,m);
int ans=0;
if(o==1)
{
ans=max(n,m);
}
else
if(o==2)
{
int y=max(n,m);
ans+=(y/4)*4;
if(y%4!=0)
{
ans+=min(2,y%4)*2;
}
}
else
{
int a1=((n+1)/2)*((m+1)/2)+(m/2)*(n/2);
int a2=((m+1)/2)*((n+1)/2)+(n/2)*(m/2);
ans=max(a1,a2);
}
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}