問題描述
每一年冬天,北大未名湖上都是滑冰的好地方。北大致育組準備了許多冰鞋,但是人太多了,
天天下午收工後,經常一雙冰鞋都不剩。
天天早上,租鞋窗口都會排起長龍,假設有還鞋的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; }