LCCUP ‘20 力扣杯 秋季编程大赛 - 战队赛

第一题

LCP 22. 黑白方格画(easy)

小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 n * n 的网格。绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色,所选行数、列数均可为 0。

小扣希望最终的成品上需要有 k 个黑色格子,请返回小扣共有多少种涂色方案。

注意:两个方案中任意一个相同位置的格子颜色不同,就视为不同的方案。

//数学题,判断一下k==0和k==n*n的两种特殊情况
//其他情况当选取a行b列涂色时,被涂黑的格子数是a*n+(n-a)*b
//故而当a*n+(n-a)*b==k时,存在涂色方案,且方案数为组合数C(n,a)*C(n,b)
class Solution { public: int f(int num) { if (num == 0) return 1; else return num * f(num - 1); } //阶乘函数 int C(int n, int m){ return f(n)/(f(m)*f(n-m)); } //组合数函数 int paintingPlan(int n, int k) { if(k==0||k==n*n)return 1; int ans=0; for(int a=0;a<=n;a++){ for(int b=0;b<=n;b++){ if((a+b)*n-a*b==k){ ans=ans+C(n,a)*C(n,b); } } } return ans; } };

 

posted @ 2020-09-20 14:18  鳄鱼四驱车  阅读(177)  评论(0编辑  收藏  举报