HDU2068 RPG的錯排

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2068

解題思路:如題所示,就是錯排。

#include <cstdio>
#include <cstring>
using namespace std;
long long a[15],c[30][30];
int main()
{
    a[1]=a[0]=0;
    a[2]=1;a[3]=2;
    for(int i=4;i<=12;++i)
        a[i]=(a[i-1]+a[i-2])*(i-1);
    memset(c,0,sizeof(c));
    for(int i=1;i<=25;++i)
        c[i][1]=i,c[i][0]=1;
    for(int i=2;i<=25;++i)
        for(int j=1;j<=i;++j)
            c[i][j]=c[i-1][j-1]+c[i-1][j];
    int n;
    while(scanf("%d",&n),n)
    {
        int k=(n+1)>>1;
        long long ans=1;
        for(int i=k;i<=n;++i)
            ans+=c[n][i]*a[n-i];
        printf("%lld\n",ans);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章