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》|统计元音字母序列的数目