多边形划分
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
Give you a convex(凸边形), diagonal n-3 disjoint divided into n-2 triangles(直线), for different number of methods, such as n=5, there are 5 kinds of partition method, as shown in Figure
-
输入
-
The first line of the input is a n (1<=n<=1000), expressed n data set.
The next n lines each behavior an integer m (3<=m<=18), namely the convex edges.
输出
-
For each give m,, output how many classification methods.
example output: Case #a : b
样例输入
-
3345
样例输出
-
Case #1 : 1Case #2 : 2Case #3 : 5
-
-
/* *卡特兰数: *a[24]={ 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, *208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, *1767263190, 6564120420, 24466267020, 91482563640, 343059613650}; *h(n)=h(n-1)*(4*n-2)/(n+1); *令h(0)=1,h(1)=1,catalan数满足递推式: *h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2); *例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2 ; *h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5 ; */ #include using namespace std; int main() { int n,m,i,k; long long a[20]={1,1,2,5}; for(i=4;i<20;i++) a[i]=a[i-1]*(4*i-2)/(i+1); cin>>n; k=1; while(n--){ cin>>m; cout << "Case #" << k++ << " : " << a[m-2] << endl; } }
-
The first line of the input is a n (1<=n<=1000), expressed n data set.