1. 程式人生 > >小知識(模板)

小知識(模板)

組合數    C(n, m)  = C(n -1, m - 1) + C(n - 1, m)

#include <bits/stdc++.h>

using namespace std;
int C[35][35];
int main()
{
    C[1][0] = C[1][1] = 1;
    for (int i = 2; i < 35; 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 n, m;
    while(scanf("%d%d", &n, &m)!=EOF)
    {
        printf("%d\n", C[n][m]);
    }
    return 0;
}

錯排     f(n)=(n-1)*(f(n-1)+f(n-2))

#include <bits/stdc++.h>
using namespace std;
//long long d=0;  //遞推
//long long f(int n)
//{
//    if(n==1)
//        return 0;
//    else if(n==2)
//        return 1;
//    else
//        d=(n-1)*(f(n-1)+f(n-2));
//    return(d);
//}
//int main()
//{
//    int n;
//    while(scanf("%d",&n)!=EOF)
//        cout << f(n) << endl;
//}

int main()
{
    long long a[30];
    int i,n;
    a[1]=0;
    a[2]=1;
    for(i=3;i<30;i++)
        a[i]=(i-1)*(a[i-1]+a[i-2]);   //打表
    while(scanf("%d",&n)!=EOF)
        printf("%lld\n",a[n]);
    return 0;
}