问题描述: | 用关系“<”和“=”将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 |
核心思想 | 前i个数中有j个'<'号的方案数,j+1表示前i个数中被'<'分成j+1个集合,新插入的数所放位 置而构成方案数 |
var
f:array[0..60]of qword;
n,i,j:longint;
ans:qword;
begin
assign(input,'p32.in');reset(input);
assign(output,'p32.out');rewrite(output);
readln(n);
f[0]:=1;
fori:=2 to n do
begin
f[0]:=1;
for j:=i-1 downto 1 do
f[j]:=(j+1)*(f[j]+f[j-1]);
end;
fori:=0 to n-1 do
inc(ans,f[i]);
writeln(ans);
close(input);close(output);
end.
题目来源:《算法设计与分析》第三章动态规划