p[i][j] = p[i-1][j-1] + p[i-1][j] * j表示i个人分为j队,p[i-1][j-1]表示第i个人并入已有队列,p[i-1][j]*j表示第i个人单独成一队。
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
long long p[26][26];
int main()
{
int t;
memset(p , 0 ,sizeof(p));
p[1][1] = 1;
for(int i = 2 ; i < 26 ; i ++ )
{
for(int j = 1 ; j <= i ; j ++ )
{
if(i == j)
{
p[i][j] = 1;
continue;
}
p[i][j] = p[i-1][j-1] + p[i-1][j] * j;
}
}
cin >> t;
while(t --)
{
int n;
cin >> n;
long long sum = 0;
for(int i = 1 ; i <= n ; i ++ ) sum += p[n][i];
cout << sum << endl;
}
return 0;
}