HDU 1465 不容易系列之一

二项式反演的基础题,手动写一遍就明白了。。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll zu[25];
void build()
{
    zu[0] = 1;
    for(int i =1 ; i <= 20 ; ++i)
    {
        zu[i] = zu[i-1] * i;
    }
}
int  main()
{
    build();
    int n;
    while(~scanf("%d", &n))
    {
        int flag = n & 1 ? -1 : 1;
        ll ans = 0;
        for(int i = 0 ; i <= n ; ++i)
        {
            ans += flag * zu[n] / zu[n-i];
            flag = - flag;
        }
        cout << ans << endl;
    }
    return 0;
}

你可能感兴趣的:(HDU,二项式反演)