题目描述
一个01字符串,长度是n,其中1比0多m个,请问不同的排列方案数有多少个?
输入
第一行是一个整数K,表示样例的个数。 以后每行两个整数n和m,1≤n≤33,0≤m≤n。
输出
每行输出一个样例的结果。
样例输入
4 2 0 2 1 3 0 3 1样例输出
2 0 0 3线索
第一个样例为"01"和"10";第二、三个样例不存在这样的串;第四个样例为"011","101","110"
解题思路: 本题就是一道纯粹得不能再纯粹的数学题——0和1的排列组合。
先验证 1比0多m个 的串是否存在,如果存在,利用组合数的知识,在 n 个数里面找 (n-m)/2 个 0 —— C(n,(n-m)/2 ).
AC代码:
#include <stdio.h>
const int N = 35;
__int64 YHtriangle[N][N];
void printangle()
{
for (int i = 0; i < N; i ++)
YHtriangle[i][0] = YHtriangle[i][i] = 1;
for (int i = 2; i < N; i ++)
for (int j = 1; j < i; j ++)
YHtriangle[i][j] = YHtriangle[i-1][j-1] + YHtriangle[i-1][j];
}
int main()
{
printangl

本文分析了给定条件下的01字符串排列问题,利用组合数学原理计算可能的排列数,并提供了C(n,(n-m)/2)的代码示例。
最低0.47元/天 解锁文章
774

被折叠的 条评论
为什么被折叠?



