由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...