673. 最长递增子序列的个数
题目链接:673. 最长递增子序列的个数
代码如下:
//动态规划
class Solution
{
public:
int findNumberOfLIS(vector<int>& nums)
{
if(nums.size()<=1) return nums.size();
vector<int> dp(nums.size(),1);//dp[i]:i之前(包括i)最长递增子序列的长度为dp[i]
vector<int> count(nums.size(),1);//count[i]:以nums[i]为结尾的字符串,最长递增子序列的个数为count[i]
int maxCount=0;
for(int i=1;i<nums.size();i++)
{
for(int j=0;j<i;j++)
{
if(nums[i]>nums[j])
{
if(dp[j]+1>dp[i])
{
count[i]=count[j];
}
else if(dp[j]+1==dp[i])
{
count[i]+=count[j];
}
dp[i]=max(dp[i],dp[j]+1);
}
if(dp[i]>maxCount) maxCount=dp[i];
}
}
int res=0;
for(int i=0;i<nums.size();i++)
{
if(maxCount==dp[i]) res+=count[i];
}
return res;
}
};