正题
题目链接:https://www.luogu.org/problem/P2638
题目大意
aaa个不同的000,bbb个不同的111。nnn个位置每个可以放0,10,10,1可以都放也可以不放也可以只放一个。然后求方案数。
解题思路
答案就是(∑i=0aCni∗Cai)∗(∑i=0bCni∗Cbi)(\sum_{i=0}^a C_{n}^{i}*C_{a}^i)*(\sum_{i=0}^b C_{n}^{i}*C_{b}^i)(i=0∑aCni∗Cai)∗(i=0∑bCni∗Cbi)
杨辉三角直接计算就好了。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define C(n,m) f[n+1][m+1]
using namespace std;
unsigned long long n,a,b,f[60][60],ans1,ans2;
int main()
{scanf("%llu%llu%llu",&n,&a,&b);f[0][0]=1;for(int i=1;i<=max(max(n+1,a+1),b+1);i++)for(int j=1;j<=i;j++)f[i][j]=f[i-1][j-1]+f[i-1][j];for(int i=0;i<=a;i++)ans1+=C(n,i)*C(a,i);for(int i=0;i<=b;i++)ans2+=C(n,i)*C(b,i);unsigned long long ans=ans1*ans2;printf("%llu",ans);
}