简单dp,dp [ i ] [ j ]表示,i个人分j租的种数。
dp [ i ] [ j ] = dp [ i-1 ] [ j-1] + dp [ i-1 ] [ j ] * j;
前者表示自己一个人组,后者表示和其他人一起租。。
注意超int。。
#include"stdio.h"
#include"string.h"
#define N 26
int main()
{
int T;
int n;
int i,j;
__int64 dp[N][N];
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(dp,0,sizeof(dp));
dp[1][1]=1;
for(i=2;i<25;i++)
{
for(j=1;j<i;j++)
dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*j;
dp[i][i]=1;
}
__int64 sum;
sum=0;
for(i=1;i<=n;i++)
sum+=dp[n][i];
printf("%I64d\n",sum);
}
return 0;
}