求助

P1040 [NOIP2003 提高组] 加分二叉树

先规定一个边界,当k==l和k==r时,f[k+1][j]和f[i][k-1]都是1; 还有,你输入了f[i][i],又把f[i][j]全部赋值为一是什么操作???
by Robert123456 @ 2021-10-26 08:35:19


你的f[i][i]明明已经定义好了,为什么还要赋值为1?
by Fislett @ 2022-12-07 18:35:40


**其实可以这么操作** 因为 $k=l$ 时, $k-1<l$ ,此时 $f(l,k-1)=1$; $k=r$ 时, $k+1>r$ ,此时 $f(k+1,r)=1$ ,可以发现,此时**第二个参数总小于第一个参数**。 所以,在预处理过程中只需要将所有满足 $j<i$ 的 $f(i,j)$ 赋值为 $1$ 就好了。 具体来说,你的原代码是: ```cpp for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=1; ``` 改成 ```cpp for(int i=1;i<=n;i++) for(int j=1;j<i;j++) f[i][j]=1; ``` 就好了。
by HFanGDoDM @ 2022-12-24 17:52:48


|