又有月赛了 虽然已经是大四实习的老人了 但是还是没忍住做了一题。。
翻了一道没人A的题看了下~
大致题意是有N个数,请问有多少种大小关系
比如3个数就是:
1) A=B=C
2) A=B<C
3) A<B=C
4) A<B<C
5) A<C<B
6) A=C<B
7) B<A=C
8) B<A<C
9) B<C<A
10) B=C<A
11) C<A=B
12) C<A<B
13) C<B<A
抽象一下,可以看作是,N个球放到盒子里的模型。
答案是:N个球放到 1,2,...N个盒子里的个数之和
A[i] 表示N个球放到i个盒子里面的方式数(每个盒子至少都有一个球)
i^N 表示N个球任意放到i个盒子的方式,因为随便放的,所以可能有的盒子并没有球,所以要减去没有球的方案数
A[1] = 1
A[2] = 2^N - C(1,2) *A[1]
A[3] = 3^N - C(1,3) *A[1] -C(2,3) *A[2]
。。。。
竟然还是大整数 果断java搞之~
样例给的输入输出竟然还是错的,要2个换行,贡献了一个PE~
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static BigInteger [][]C = new BigInteger[55][55];
static void getC()
{
int i,j;
C[0][0] = BigInteger.ZERO;
for(i=1;i<55;++i)
C[0][i] = BigInteger.ONE;
for(i=1;i<55;++i)
{
for(j=1;j<i;++j)
{
C[j][i] = C[j][i-1].add(C[j-1][i-1]);
}
C[i][i] = BigInteger.ONE;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T,N,i,j;
BigInteger A[] = new BigInteger[55];
BigInteger sum;
getC();
T = sc.nextInt();
while(T-- !=0)
{
N = sc.nextInt();
A[1] = BigInteger.ONE;
sum=A[1];
for (i=2;i<=N;++i)
{
A[i] = BigInteger.valueOf(i).pow(N);
for (j=1;j<=i-1;++j)
{
A[i]= A[i].subtract(C[j][i].multiply(A[j]));
}
sum = sum.add(A[i]);
}
System.out.printf("%d\n\n",sum);
}
}
}