(DP)673. 최장 증자 서열의 개수

1234 단어 동적 기획leetcode
정렬되지 않은 정수 그룹을 지정하고 가장 긴 증자 서열의 개수를 찾습니다.
예1:
입력: [1,3,5,4,7] 출력: 2 해석: 두 개의 최장 증자 서열이 있는데 각각 [1,3,4,7]과 [1,3,5,7]이다.예2:
입력:[2,2,2,2] 출력:5 해석: 최장 체증 서열의 길이는 1이고 5개 서열의 길이가 1이 존재하기 때문에 출력5.주의: 주어진 그룹의 길이는 2000을 넘지 않으며 결과는 32비트에 기호 정수가 있어야 합니다.
문제풀이: 시간이 촉박하여 코드를 좀 못생겼다.
dp[i] i를 끝으로 하는 최장자 서열 유지하기;
num[i]는 i로 끝나는 가장 긴 서열의 개수를 유지합니다.
class Solution {
public:
    int dp[2005];
    int num[2005];
    int findNumberOfLIS(vector& a) {
        int len=a.size();
        if(!len) return 0;
        int ans=1;         //  ans            

        memset(dp,0,sizeof(dp));

        for(int i=0;ia[j]){
                    leap=1;
                    dp[i]=max(dp[i],dp[j]+1);
                    ans=max(ans,dp[i]);
                }
            }
            if(!leap){
                num[i]=1;
                continue;
            }

            for(int j=0;ja[j]){
                    if(dp[j]+1==dp[i]){
                        num[i]+=num[j];
                    }
                }
            }
        }
        int ok=0;
        for(int i=0;i

좋은 웹페이지 즐겨찾기