多边形划分
时间限制:1000 ms | 内存限制:65535 KB
- 描述
-
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 - 样例输入
-
3 3 4 5
- 样例输出
-
Case #1 : 1 Case #2 : 2 Case #3 : 5
- 提示
- Catalan number
#include <cstdio> #include <iostream> using namespace std; int dp[20]; int f(int n) { if(dp[n]) return dp[n]; if(n == 2 || n == 3) return 1; if(n == 4) return 2; int ret = 0; for(int i=2; i<n; i++) { ret += f(i) * f(n-i+1); } return dp[n] = ret; } int main () { int n, m; scanf("%d", &n); for(int kase=1; kase<=n; kase++) { scanf("%d", &m); printf("Case #%d : %d\n", kase, f(m)); } return 0; }
NYOJ 1103 —— m划分为n个正整数的个数
时间: 2024-10-13 16:04:40