【刷题之路】 涂色问题

你要在一个nxm的格子图上涂色,你每次可以选择一个未涂色的格子涂上你开始选定的那种颜色。同时为了美观,我们要求你涂色的格子不能相邻,也就是说,不能有公共边,现在问你,在采取最优策略的情况下,你最多能涂多少个格子?

给定格子图的长n和宽m。请返回最多能涂的格子数目。

只有一种颜色,要想不相邻,每行一个隔一个涂色即可,如果行数或者列数为偶数,最多的格子即为(m/2)*n或者(n/2)*m,显然就是m*n/2

如果行列均不为偶数,假设多加一列,则最大格子就为((n+1)/2)*m,然后需要减去多加的格子数为(m-1)/2,两式合并即为(n*m+1)/2

又由int除法特性,可以将两式合并为(n*m+1)/2,即为所求

class Paint {
public:
    int getMost(int n, int m) {
        // write code here
        return (n*m+1)/2;
    }
};

你可能感兴趣的:(【刷题之路】 涂色问题)