LeetCode 5833. 统计特殊子序列的数目(dp)

Posted live4m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 5833. 统计特殊子序列的数目(dp)相关的知识,希望对你有一定的参考价值。

题意:


解法:

序列只有以0,1,2结尾的三种状态

d[i][j]表示前i个数,状态为j的方案数,其中j的取值为0,1,2.

对于当前的数x,
1.如果x=0,
d[i][0]=d[i-1][0]*2+1
2.如果x=1,
d[i][1]=d[i-1][0]+d[i-1][1]*2
3.如果x=2,
d[i][2]=d[i-1][1]+d[i-1][2]*2

最后答案就是d[n][2].

dp数组的第一维可以滚动优化掉

code:

const int mod=1e9+7;
class Solution {
public:
    int countSpecialSubsequences(vector<int>& a) {
        long long d[3]={0};
        int n=a.size();
        for(int i=0;i<n;i++){
            int x=a[i];
            if(x==0){
                d[0]+=d[0]+1;
                d[0]%=mod;
            }else if(x==1){
                d[1]+=d[1]+d[0];
                d[1]%=mod;
            }else if(x==2){
                d[2]+=d[2]+d[1];
                d[2]%=mod;
            }
        }
        return d[2];
    }
};

以上是关于LeetCode 5833. 统计特殊子序列的数目(dp)的主要内容,如果未能解决你的问题,请参考以下文章

Python|Leetcode《1220》|统计元音字母序列的数目

LeetCode-1220 统计元音字母序列的数目

LeetCode 1759. 统计同构子字符串的数目

LeetCode 1759. 统计同构子字符串的数目

LeetCode1220 统计元音字母序列的数目[动态规划] HERODING的LeetCode之路

leetcode1967_go_作为子字符串出现在单词中的字符串数目