SGU130,用k条弦将一个圆分成k+1份的方法数。
#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <string.h>
using namespace std; long long dp[]; long long f(int k) {
if (dp[k]) {
return dp[k];
}
if (k <= ) {
return ;
}
long long ans = ;
for (int i = ; i < k; i++) {
ans += f(i) * f(k - - i);
}
return dp[k] = ans;
} int main() {
int k;
scanf("%d", &k);
memset(dp, , sizeof(dp));
printf("%lld %d\n", f(k), k + );
}