社区讨论
求大佬帮我看看思路为什么不行,看了题解没有一篇是采用这思路的
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 条回复,欢迎继续交流。
正在加载回复...