摘要: 题解:考虑长为n的串,以s[i]表示i位的字符。1.若前n-1位组成的串合法,则由于首尾不同,再添加一位时,只有1种方法;即s[n] = s[n-1]2.若前n-1位组成的串不合法,再添加一位后合法,即因为首尾相同而引起的不合法,那么前n-2位组成的串必定合法。此时第n位有2种添加方法。即s[n] = 2*s[n-2]3.边界条件:f(1)=3;f(2)=6;f(3)=6#include using namespace std;long long f[51];int main(){ int n; f[1]=3; f[2]=6; f[3]=6; for(int i=4; i>n... 阅读全文
posted @ 2014-01-21 13:25 forever97 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 递推式:f[n]=2*f[n-2]+f[n-1]#include #include using namespace std;long long f[51];int main(){ int i,n; f[1]=1; f[2]=3; for(int i=3; i>n; while(cin>>n) cout<<f[n]<<endl; return 0;} 阅读全文
posted @ 2014-01-21 11:09 forever97 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 题解:http://www.cnblogs.com/forever97/p/3522238.html#include int main(){ int n; scanf("%d",&n); while(scanf("%d",&n)!=EOF) printf("%d\n",2*n*n-n+1); return 0;} 阅读全文
posted @ 2014-01-21 10:13 forever97 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 递推式:f[n]=f[n-1]+f[n-3]#include #include using namespace std;long long f[56];int main(){ int i,n; f[0]=1; f[1]=1; f[2]=2; for(int i=3; i>n,n!=0) cout<<f[n]<<endl; return 0;} 阅读全文
posted @ 2014-01-21 10:07 forever97 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题解:简单的斐波那契数列#include #include using namespace std;long long f[51];int main(){ int i,n; f[1]=1; f[2]=2; for(int i=3; i>n) cout<<f[n]<<endl; return 0;} 阅读全文
posted @ 2014-01-21 09:59 forever97 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 题解:将m与n相减,又回到超级楼梯这道题。#include #include using namespace std;long long f[50];int main(){ int i,t; f[1]=1; f[2]=2; for(int i=3; i<50; i++) f[i]=f[i-1]+f[i-2]; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); n=m-n; cout<<f[n]<<endl; } ret... 阅读全文
posted @ 2014-01-21 09:49 forever97 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 递推式:f[n]=f[n-1]+f[n-2]#include int f[41];int main(){ int i,t; f[1]=1; f[2]=1; for(int i=3; i<41; i++) f[i]=f[i-1]+f[i-2]; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); printf("%d\n",f[n]); } return 0;} 阅读全文
posted @ 2014-01-21 09:38 forever97 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 题解:卡特兰数的几何意义,所以答案就是卡特兰数的两倍#include #include using namespace std;#define base 10000#define len 100void multiply(int a[],int max,int b){ int i,array=... 阅读全文
posted @ 2014-01-21 09:28 forever97 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题解:利用卡特兰数的几何意义,题目就可以转化为一个棋盘格,可以向下走或是向右走,但是不可以逾越对角线,就可以了。#include #include using namespace std;long long f[21][21];int main(){ int m,n; for(int i=1; i>m>>n) cout<<f[m][n]<<endl; return 0;} 阅读全文
posted @ 2014-01-21 09:17 forever97 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 卡特兰数再乘上n的阶乘#include#includeusing namespace std;#define base 10000#define len 100void multiply(int a[],int max,int b){ int i,array=0; for(i=max-1;i>=0;i--) { array+=b*a[i]; a[i]=array%base; array/=base; }}void divide(int a[],int max,int b){ int i,div=0; for(... 阅读全文
posted @ 2014-01-21 08:27 forever97 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 题目大意:M+N个人排队买票,票的单价是50¥,每个人只能买一张。 M个人拿50的去买,N个人拿100的去买,然后悲剧的是售票处开始的时候没有钱,所以如果拿100块买票人前面的拿50块买票的人小于或者等于用100块买票的人,这种排队方式就不合法,也就是不能顺利全部都买到票(因为没零钱找了)!题解:这是一个Catalan数的非常经典的应用,买票问题,首先我们用"0"表示用50块买票的人,用“1”表示用100块买票的人,然而假设m=4,n=3,的一个序列是:0110100显然,它不合法,然后我们把他稍微变化一下:把第一个不合法的“1”后面的所有数0位为1, 1位为0;这样我们得 阅读全文
posted @ 2014-01-21 08:15 forever97 阅读(177) 评论(0) 推荐(0) 编辑