题解:
class Solution {
public:
int findNumberOfLIS(vector<int>& nums) {
//动态规划 dp[i]:i之前包括i的最长递增子序列 nums[i]需要在该序列中
//j<i nums[i]>nums[j]时 dp[i] = max(dp[i],dp[j]+1);
vector<int> dp(nums.size(),1);
//最长子序列的长度
int maxLen= 0;
//cnt[i]:i之前包括i的最长递增子序列的个数
vector<int> cnt(nums.size(),1);
//最长递增子序列的个数
int result =0;
//计算dp数组和cnt数组
for(int i =0;i<nums.size();i++){
for(int j = 0;j<i;j++){
if(nums[i]>nums[j]){
if(dp[i]<dp[j]+1){
dp[i] = dp[j]+1;
//长度增加 个数重置
cnt[i] = cnt[j];
}else if(dp[i] == dp[j]+1){
//长度不增加 个数增加
cnt[i]+=cnt[j];
}
}
}
if(dp[i]>maxLen){
//取最大
maxLen = dp[i];
result = cnt[i];
}else if(dp[i] == maxLen){
result+=cnt[i];
}
}
return result;
}
};