问题描述
每一年冬天,北大未名湖上都是滑冰的好地方。北大致育组准备了许多冰鞋,但是人太多了,
天天下午收工后,经常一双冰鞋都不剩。
天天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有须要租鞋的n个。
如今的问题是,这些人有多少种排法,能够避免出现体育组没有冰鞋可租的尴尬场面。
(两个一样需求的人(好比都是租鞋或都是还鞋)交换位置是同一种排法)
输入格式
两个整数,表示m和n
输出格式
一个整数,表示队伍的排法的方案数。
样例输入
3 2
样例输出
5
数据规模和约定
m,n∈[0,18]ios
分析:枚举出全部排法状况再进行分析满不知足题目条件spa
代码:code
#include<iostream> using namespace std; int m, n; int ans = 0; int a[40]; int b[40]; void solve(int cur) { if(cur == m+n) { int flag = 0; for(int i = 0; i < m+n; i++) { if(b[i]) flag++; else flag--; if(flag < 0) break; } if(flag >= 0) ans++; } else for(int i = 0; i < m+n; i++) { if(!i || a[i] != a[i-1]) { int c1 = 0, c2 = 0; for(int j = 0; j < cur; j++) if(a[i] == b[j]) c1++; for(int j = 0; j < m+n; j++) if(a[i] == a[j]) c2++; if(c1 < c2) { b[cur] = a[i]; solve(cur+1); } } } } int main() { cin >> m >> n; for(int i = 0; i < m; i++) a[i] = 1; for(int i = m; i < n; i++) a[i] = 0; solve(0); cout << ans << endl; return 0; }