題意:
給你一個n*m的棋盤,問你棋盤上最多放多少個馬,使得任意兩個馬都不會互相攻擊。
做法:
對於棋盤,我們會發現,如果我們只把馬放在白色的方格內,則任意兩個馬都不會互相攻擊。
這樣我們有了第一種放法,全放在白格內或者全放在黑格內。
但是有一些特殊情況。
假如n=min(n,m),m=max(n,m);
如果n=1,那麼我們可以在棋盤上全放上棋子。
如果n=2,那麼我們可以一次把一個田字格全部放上馬,然後間隔一個田字格,然後再放馬。
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
#define LL long long
int main()
{
int T;
scanf("%d",&T);
int cas=0;
while(T--)
{
cas++;
int n,m,x,y;
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);
x=n*m;
x=x/2;
y=n*m-x;
y=max(x,y);
if(n==1)x=m;
if(n==2)x=2*(2*(m/4)+min(2,m%4));
printf("Case %d: %d\n",cas,max(x,y));
}
return 0;
}