URAL1114 Boxes 组合计数
给定N,A,B N个盒子,A个红球,B个蓝球 。 可以随便放进盒子里。(可以不放) 问有几种放法。
放法 = A的方法 * B的放法
A 的放法 = C(N,1) + C(N+1,2) +.....
B的放法同理
注意开ull
long long C[40][40]; void get_C(int maxn) { C[0][0] = 1; for (int i = 1; i <= maxn; i++) { C[i][0] = 1; for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1]; } } int main() { ll n, a, b; cin >> n >> a >> b; ll ans = 1; ll c = max(a, b); get_C(n + c + 5); ll x = 1; ll res = 1; ll ans1, ans2; ans1 = ans2 = 1; for (int i = 1; i <= c; i++) { res += C[n++][i]; if (i == a) ans1 = res; if (i == b) ans2 = res; } cout << ans1 * ans2; }