求大佬帮我看看思路为什么不行,看了题解没有一篇是采用这思路的
查看原帖
求大佬帮我看看思路为什么不行,看了题解没有一篇是采用这思路的
706459
Go_for_itligli666666楼主2022/5/22 10:03

得到递推公式 f[k]=0; for(int x=0;x<=k-1;x++){ f[k]+=(f[k-x]+1); }

推导过程如下:假设有k个元素要进栈,这k个数的前面k-1个数已经进栈了一次(先不管有没有弹出来),那么当第k个元素(就是最后一个元素)要进栈时: (初始化设f[k]=0)

一、若栈里面有k-1个元素,则(1)先把这k-1个元素弹出来,有f[k-1]种,或(2)直接把第k个元素放进去,再全弹出来,有1种——综合(1)(2)得到f[k]+=f[k-1]+1;

二、若栈里面有k-2个元素,则(1)先把这k-2个元素弹出来,有f[k-2]种,或(2)直接把第k个元素放进去,再全弹出来,有1种——综合(1)(2)得到f[k]+=f[k-2]+1;

三、同理,若栈里面有k-x个元素,则(1)先把这k-x个元素弹出来,有f[k-x]种,或(2)直接把第k个元素放进去,再全弹出来,有1种——综合(1)(2)得到f[k]+=f[k-x]+1;

结论:得到递推公式 f[k]=0; for(int x=0;x<=k-1;x++){ f[k]+=(f[k-x]+1); }

2022/5/22 10:03
加载中...