-
{{ a}, { b}, { c}}
-
{{ a}, { b, c}}
-
{{ b}, { a, c}}
-
{{ c}, { a, b}}
-
{{a, b, c}}
当3个元素时有5种三个元素都存在的集合
S
(P
,K
)=S
(P
-1,K
-1)+K
*S
(P
-1,K
);
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int N=2001;
int data[N][N];
int sum[N];
void compute(){
memset(data,0,sizeof(data));
memset(sum,0,sizeof(sum));
data[1][1]=1;
sum[1]=1;
for (int i = 2; i < N; ++i)
{
for (int j = 1; j <= i ; ++j)
{
data[i][j]=data[i-1][j-1]+j*data[i-1][j];
sum[i]+=data[i][j];
}
}
}
int main(){
int T;
scanf("%d",&T);
compute();
for(int i = 0 ; i < T ; i++){
int m;
scanf("%d",&m);
printf("%d\n",sum[m]);
}
return 0;
}
sum[n]为结果集,sum[3]为三个元素时集合划分种类;