Description
用关系 “<” 和 “=” 将 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)依序排列时有多少种序关系.
Input
有多个测试用例. 每个测试用例是一个正整数 n. 输入直至没有数据为止.
Output
对于每个测试用例给定的 n, 在一行上输出序关系种数.
Sample Input
3
Sample Output
13
分析一:
2个
A = B
A < B
B < A
d
p
[
2
]
=
3
dp[2]=3
dp[2]=3
3个
A = B = C,
A < B < C,
A < C < B,
B < A < C,
B < C < A,
C < A < B,
C < B < A
A < B = C,
A = B < C,
A = C < B,
B < A = C,
B = C < A,
C < A = B,
a
1
?
a
2
?
a
3
a_1?a_2?a_3
a1?a2?a3
a
1
=
a
2
=
a
3
a_1=a_2=a_3
a1=a2=a3 有
1
1
1
a
1
<
a
2
?
a
3
a_1<a_2?a_3
a1<a2?a3 有
C
3
1
×
d
p
[
2
]
=
9
C_3^{1}\times dp[2]=9
C31×dp[2]=9
a
1
=
a
2
<
a
3
a_1=a_2<a_3
a1=a2<a3 有
C
3
2
=
3
C_3^{2}=3
C32=3
d
p
[
3
]
=
13
dp[3]=13
dp[3]=13
a
1
?
a
2
?
a
3
?
a
4
a_1?a_2?a_3?a_4
a1?a2?a3?a4
a
1
=
a
2
=
a
3
=
a
4
a_1=a_2=a_3=a_4
a1=a2=a3=a4 有
1
1
1
a
1
<
a
2
?
a
3
?
a
4
a_1<a_2?a_3?a_4
a1<a2?a3?a4 有
C
4
1
×
d
p
[
3
]
=
52
C_4^{1}\times dp[3]=52
C41×dp[3]=52
a
1
=
a
2
<
a
3
?
a
4
a_1=a_2<a_3?a_4
a1=a2<a3?a4 有
C
4
2
×
d
p
[
2
]
=
18
C_4^{2}\times dp[2]=18
C42×dp[2]=18
a
1
=
a
2
=
a
3
<
a
4
a_1=a_2=a_3<a_4
a1=a2=a3<a4 有
C
4
3
C_{4}^{3}
C43
C n m = C n − 1 m + C n − 1 m − 1 C_{n}^{m}=C_{n-1}^{m}+C_{n-1}^{m-1} Cnm=Cn−1m+Cn−1m−1
#include<iostream>
using namespace std;
long long c[51][51];
long long g[51];
void init() {
for (int m = 1; m <= 50;++m)
{
c[m][0]=c[m][m]=1;
for (int n = 1; n<=m - 1;++n)
c[m][n] = c[m - 1][n - 1] + c[m - 1][n];
}
g[1] = 1;
g[2] = 3;
for (int i = 3; i <= 50;++i)
{
g[i] = 1;
for (int j = 1; j < i;++j)
g[i]+=c[i][j]*g[i-j];
}
}
int main() {
init();
int n;
while(cin>>n) {
cout << g[n] << endl;
}
return 0;
}
分析二:
2个
A = B
A < B
B < A
d
p
[
2
]
[
0
]
=
1
,
d
p
[
2
]
[
1
]
=
2
,
d
p
[
2
]
[
2
]
=
0
dp[2][0]=1,dp[2][1]=2,dp[2][2]=0
dp[2][0]=1,dp[2][1]=2,dp[2][2]=0
3个
A = B = C,
A < B < C,
A < C < B,
B < A < C,
B < C < A,
C < A < B,
C < B < A
A < B = C,
A = B < C,
A = C < B,
B < A = C,
B = C < A,
C < A = B,
a
1
?
a
2
?
a
3
a_1?a_2?a_3
a1?a2?a3
2个’<'的情况=
a
1
<
a
2
a_1<a_2
a1<a2的情况3
1个’<'的情况=
a
1
=
a
2
a_1=a_2
a1=a2的情况+
a
1
?
a
2
?
a
3
?
a
4
a_1?a_2?a_3?a_4
a1?a2?a3?a4
a
1
=
a
2
=
a
3
=
a
4
a_1=a_2=a_3=a_4
a1=a2=a3=a4 有
1
1
1
a
1
<
a
2
?
a
3
?
a
4
a_1<a_2?a_3?a_4
a1<a2?a3?a4 有
C
4
1
×
d
p
[
3
]
=
52
C_4^{1}\times dp[3]=52
C41×dp[3]=52
a
1
=
a
2
<
a
3
?
a
4
a_1=a_2<a_3?a_4
a1=a2<a3?a4 有
C
4
2
×
d
p
[
2
]
=
18
C_4^{2}\times dp[2]=18
C42×dp[2]=18
a
1
=
a
2
=
a
3
<
a
4
a_1=a_2=a_3<a_4
a1=a2=a3<a4 有
C
4
3
C_{4}^{3}
C43
C n m = C n − 1 m + C n − 1 m − 1 C_{n}^{m}=C_{n-1}^{m}+C_{n-1}^{m-1} Cnm=Cn−1m+Cn−1m−1