zoukankan      html  css  js  c++  java
  • Lightoj 1010

    题目连接:

      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
    ", ++l, num);
    19    }
    20    return 0;
    21 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    接口测试基础07
    性能测试基础01
    接口测试基础06
    将java list转换为js的数组
    java 网络编程
    java分页
    单例模式
    适配器模式
    抽象工厂模式
    工厂模式
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4646559.html
Copyright © 2011-2022 走看看