LeetCode LCP 22.白黒の市松模様の絵

記事ディレクトリ

1.タイトル

Xiaokouは、秋の市場に白黒の正方形の絵画を作成するブースがあることに気づきました。
区画の所有者は、壁に固定された回転できない白い製図板を各顧客に提供します。
描画ボードn * nグリッド上にあります。描画ルールでは、小さなボタンで任意の数の行任意の数の列黒く塗りつぶすことができ、選択した行と列の数を0にすることができます。

Xiaokouは、最終製品にk個の黒いグリッドがあることを願っていますXiaokou 配色数に戻ってください

注:2つのスキームのいずれかで同じ位置にあるグリッドの色は異なり、異なるスキームと見なされます。

示例 1:
输入:n = 2, k = 2
输出:4
解释:一共有四种不同的方案:
第一种方案:涂第一列;
第二种方案:涂第二列;
第三种方案:涂第一行;
第四种方案:涂第二行。

示例 2:
输入:n = 2, k = 1
输出:0
解释:不可行,因为第一次涂色至少会涂两个黑格。

示例 3:
输入:n = 2, k = 4
输出:1
解释:共有 2*2=4 个格子,仅有一种涂色方案。

限制:
1 <= n <= 6
0 <= k <= n * n

出典:LeetCodeリンク:https://leetcode-cn.com/problems/ccw6C7
著作権はLeetCode が所有しています商用転載については、正式な許可書にご連絡ください。非商用転載については、出典を明記してください。

2.問題解決

class Solution {
    
    
public:
    int paintingPlan(int n, int k) {
    
    
        int x, y, ans = 0;
        if(n*n == k) return 1;//肯定只有一种方案
        for(x = 0; x <= n; ++x) 
        {
    
    
            for(y = 0; y <= n; ++y)
            {
    
    
                if((x+y)*n-x*y == k)
                {
    
    
                    ans += C(n,x)*C(n,y);//两个方向的组合数相乘
                }
            }
        }
        return ans;
    }
    int C(int n, int x)
    {
    
    
        int up = 1, t = x, down = 1;
        while(t--)
        {
    
    
            up *= n--;
            down *= x--;
        }
        return up/down;
    }
};

0 ms 5.9 MB


私のCSDN ブログアドレスhttps://michael.blog.csdn.net/

QRコードを長押しまたはスキャンして、私の公式アカウント(Michael Amin)をフォローし、一緒に来て、学び、一緒に進歩してください!
マイケル・アミン

おすすめ

転載: blog.csdn.net/qq_21201267/article/details/108684240