求最長上公升子串行

2021-07-15 11:01:41 字數 1171 閱讀 5048

由n個不相同的整數組成的數列,記為:a(1),a(2),…,a(n)且a(i)≠a(j)(i≠j),例如,3,18,7,14,10,12,23,41,16,24.若存在i1

< i2

3<…e且有a(i1)2)<…e),則稱其為長度為e的不下降子串行。如上例中3,18,23,24就是乙個長度為4的不下降子串行,同時也有3,7,10,12,16,24長度為6的不下降子串行。程式要求,當原數列給出之後,求出最長的不下降子串行的資料個數。

輸入檔案:

第一行為n(1≤n≤5000),第二行為n個整數,之間用空格隔開。

輸出檔案:

最長的不下降子串行的資料個數。

輸入樣例:

10

3 18 7 14 10 12 23 41 16 24

輸出樣例:

6

動規思想

///正推

/*#include#includeusing namespace std;

int main()

; scanf("%d",&n);

for(int i=1;i<=n;i++)

f[1]=1;

for(int i=2;i<=n;i++)

}for(int i=1;i<=n;i++)

printf("%d\n",maxn);

return 0;

}*////倒推

#include#includeusing namespace std;

int main()

for(int i=n-1;i>=1;i--)

}for(int i=1;i<=n;i++)

printf("%d\n",maxn);

return 0;

}

求最長上公升子串行

q 有乙個長為n的數列a0,a1,an 1。求出這個序列中最長的上公升子串行的長度。上公升子串行指的是對於任意的i大致思路是這樣的,初始設定乙個最大長度maxlength為0,從數列的第一項開始遍歷,只要當前項大於前一項則加入,否則繼續遍歷,直至此次遍歷結束。然後與maxlength做對比,如果大於...

求最長上公升子串行

通常求最長上公升子串行的做法是兩層for迴圈,這裡從別人那裡學會了另一種sao操作 includeusing namespace std int n int a 500005 int up 500005 儲存上公升的長度 int down 500005 下降的長度 int u 500005 最大化上...

最長上公升子串行求長度

普通dp 複雜度o 2 1 include 2 using namespace std 34 const int n 1010 5 inta n dp n n 67 intmain 1819 int res 0 20 for int i 1 i n i 21 res max res,dp i 222...