dp思路求助!!!
查看原帖
dp思路求助!!!
1014544
supernoobbb楼主2024/5/10 18:47

我设dp[i][j]表示考虑到第i个数字,栈内有j个元素的顺序数,依次考虑第1-n个数字。然后对每个数字有两种情况,入栈后要么留在栈顶,要么弹出去形成顺序,遂写出以下转移```

for(int i=2;i<=n;i++)//第几个数字
for(int j=0;j<i;j++)//当前栈内有几个
for(int s=j;s>=0;s--)//当前j情况下,弹栈顶剩s个
{
  dp[i][s]+=dp[i-1][j];
  dp[i][s+1]+=dp[i-1][j];
}

然后发现重复了,加上如下

    for(int i=2;i<=n;i++)
    for(int j=0;j<i;j++)
    for(int s=j;s>=0;s--)
    {
        if(s==0)dp[i][s]+=dp[i-1][j];
        dp[i][s+1]+=dp[i-1][j];
    }

才过,意思是当栈内非空时只能入栈,不然就重复了,有没有大佬来告诉一下我这个蒟蒻是为啥啊QAQ

2024/5/10 18:47
加载中...