社区讨论

求大佬帮我看看思路为什么不行,看了题解没有一篇是采用这思路的

P1044[NOIP 2003 普及组] 栈参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo8urnsp
此快照首次捕获于
2023/10/28 00:53
2 年前
此快照最后确认于
2023/10/28 00:53
2 年前
查看原帖
得到递推公式 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); }

回复

1 条回复,欢迎继续交流。

正在加载回复...