题目:
链接:
https://leetcode.cn/problems/number-of-longest-increasing-subsequence/description/
代码:
class Solution {
public int findNumberOfLIS(int[] nums) {
int n=nums.length;
int[] len=new int[n];
int[] count=new int[n];
//初始化
for(int i=0;i<n;i++) len[i]=count[i]=1;
int maxLen=0,maxCount=0;
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
//转移方程
if(nums[i]>nums[j]){
if(len[i]==len[j]+1){
count[i]+=count[j];
}else if(len[i]<len[j]+1){
len[i]=len[j]+1;
count[i]=count[j];
}
}
}
//返回值
if(maxLen<len[i]){
maxLen=len[i];
maxCount=count[i];
}else if(maxLen==len[i]){
maxCount+=count[i];
}
}
//返回结果
return maxCount;
}
}
状态表示:
- len[i]表示:以i结尾的子序列中,最长递增子序列的长度
- count[i]表示:以i结尾的子序列中,最长递增子序列的个数