POJ 2533 最長上升子序列長度的求解 DP實現

#include<cstdio>
#include<cstring>
#define maxn 1001
using namespace std;

int N;//數據個數
int a[maxn];//儲存數據
int dp[maxn];//dp[i]表示以i結束的最長上升子序列的最大長度 初始爲1
int main()
{
    while(~scanf("%d",&N))
    {
        for(int i=1;i<=N;i++)
                    scanf("%d",&a[i]);
        int ans=0;

        for(int i=1;  i<=N;  i++)
        {
                dp[i]=1;
                for(int j=1;j<i;j++)
                {
                    if(a[i]>a[j]  &&  dp[i]<dp[j]+1)//如果a[i]可以作爲a[j]的後續 並且 作爲後續之後可以使 序列變長
                    {
                        dp[i]=dp[j]+1;
                    }
                }
                if(ans<dp[i])ans=dp[i];
        }
        printf("%d\n",ans);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章