f[i]表示第i个元素结尾的上升子序列的长度
cnt[i]表示第i个元素结尾的上升子序列的个数。
先用常规的dp,求出f[i]和cnt[i],然后再遍历一遍计算出答案
class Solution {
public:
int findNumberOfLIS(vector<int>& nums) {
int n = nums.size();
vector<int> f(n, 1), cnt(n, 1);
int max_len = 1, idx = 0;
for (int j = 1; j < n; j++) {
for (int i = 0; i < j; i++) {
if (nums[j] > nums[i]) {
if (f[i] + 1 > f[j]) {
f[j] = f[i] + 1;
cnt[j] = cnt[i];
} else if (f[i] + 1 == f[j]) {
cnt[j] += cnt[i];
}
}
}
max_len = max(max_len, f[j]);