sgu130

来源:互联网 发布:上海市人工智能学会 编辑:程序博客网 时间:2024/06/08 01:14

一个简单的动态规划题目,其实就是求一个卡特兰数。

思路是这样:把所有的点分成两部分,都是2的倍数,然后各自组合成合乎要求的弦即可。而合乎要求的弦,则是与其他弦不相交的弦,总共有k+1个,k为输入。

难度等级:★☆☆☆☆

#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<stack>#include<cmath>#include<map>#include<time.h>using namespace std;const int M=1000030;const int N=1001;const int inf=1<<29;//const double inf=1000000000000000000LL;const double eps=1e-12;const double pi=acos(-1.0);int k;__int64 ans[N][2];void init(){ans[0][0]=1;ans[1][0]=1;ans[1][1]=2;ans[2][0]=2;ans[2][1]=3;for(int i=3;i<=30;i++){ans[i][1]=i+1;for(int j=0;j<i;j++) ans[i][0]+=ans[j][0]*ans[i-j-1][0];}}int main(){init();//for(int i=1;i<=30;i++)//printf("%I64d %I64d\n",ans[i][0],ans[i][1]);while(scanf("%d",&k)==1){printf("%I64d %I64d\n",ans[k][0],ans[k][1]);}return 0;}


原创粉丝点击