南邮 OJ 1222 序关系计数问题
2015-08-05 11:18
225 查看
序关系计数问题
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 128 测试通过 : 24
比赛描述
用关系“<”和“=”将3个数A、B和C依序排列时有13 种不同的序关系:A=B=C,A=B<C,A<B=C,A<B<C,A<C<B,A=C<B,B<A=C,B<A<C,B<C<A,B=C<A,C<A=B,C<A<B,C<B<A。将n个数(1≤n≤50)依序排列时有多少种序关系。
编程计算出将n个数( 1≤n≤50)依序排列时有多少种序关系。
输入
输入多行,每一行提供一个数n。
输出
对应输入,依次输出多行,每一行输出种序关系数。
样例输入
3
样例输出
13
提示
题目来源
算法设计与实验题解
#include<iostream>
#define MAX_N 51
__int64 dp[MAX_N][MAX_N]; //dp[i][j]:i个数,有j个‘<’链接,共有多少种情况
int main(){
int n,i,j;
for(i=0;i<MAX_N;i++){
dp[i][0] = 1;
}
for(i=0;i<MAX_N;i++){
for(j=1;j<i;j++){
dp[i][j] = (j+1)*(dp[i-1][j]+dp[i-1][j-1]);
}
}
for(i=0;i<MAX_N;i++){
for(j=0;j<i;j++){
dp[i][i] += dp[i][j]; //dp[i][i]存放每一行的和
}
}
while(scanf("%d",&n)==1){
printf("%I64d\n",dp
);
}
}