UVa – 11282 – Mixing Invitations

#include <iostream>

#include <cstdio>
using namespace std;

typedef  long long int LONG;

int main() {
	LONG nck[21][21],der[21]; int N, M;

	for (int i = 0; i < 21; ++i)
		der[i] = i < 2 ? 1 - i : (i - 1) * (der[i - 2] + der[i - 1]);

	for (int n = 0, nCk = 1; n < 21; n++, nCk = 1)
		for (int k = 0; k <= n; k++)
			nck[n][k] = nCk, nCk = nCk * (n - k) / (k + 1);

	while (scanf("%d %d\n", &N, &M) == 2) {
		LONG total = 0;
		for (int i = 0; i <= M; i++)
			total += nck[N][i] * der[N - i];
		printf("%lld\n", total);
	}
	return 0;
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: