码迷,mamicode.com
首页 > 其他好文 > 详细

Lightoj 1010 - Knights in Chessboard (胡搞)

时间:2015-07-14 22:27:10      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

题目连接:

  http://www.lightoj.com/volume_showproblem.php?problem=1010

题目描述:

  有一个n*m的棋盘,根据象棋中马走日字的规则,问此棋盘最多可以存放多少个马,并且任意两个马之间不会相互攻击。

解题思路;

  从题目中给的棋盘可以看出,如果我们只把马放在白格子或者只把马放在黑格子的话都是合法的,但是是不是最优呢?

  仔细考虑一下就可以得出:

              当min(n, m) == 1的时候,把格子放满马也是没事的,

              当min(n, m) == 2的时候,可以放满一个2*2的格子,空出来一个2*2的格子,依次到放满棋盘,因为min(n, m) == 2,不可能出现相邻列的马相互攻击。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main ()
 4 {
 5    int t, n, m, num, l = 0;
 6    scanf ("%d", &t);
 7    while (t --)
 8    {
 9        scanf ("%d %d", &n, &m);
10        if (n > m)
11         swap (n, m);
12        if (n == 1)
13        num = m;
14        else if (n == 2)
15            num = n*(2*(m/4) + min(2, m%4));
16        else
17         num = max (n*m/2, n*m-n*m/2);
18        printf ("Case %d: %d\n", ++l, num);
19    }
20    return 0;
21 }

 

Lightoj 1010 - Knights in Chessboard (胡搞)

标签:

原文地址:http://www.cnblogs.com/alihenaixiao/p/4646559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!