計蒜客 單調減子串行

2021-08-18 14:47:39 字數 887 閱讀 1619

從乙個由 nn 個整數排列組成的整數序列中,自左向右不連續的選出一組整數,可以組成乙個單調減小的子串行(如從 [68, 69, 54, 64, 68, 64, 70, 67, 78, 62, 98, 87][68,69,54,64,68,64,70,67,78,62,98,87] 中我們可以選取出 [69, 68, 64, 62][69,68,64,62] 這個子串行;當然,這裡還有很多其他符合條件的子串行)。給定整數序列的長度和整數序列中依次的值,請你求出這個整數序列中「最長的單調減小的子串行的長度」以及「值不同但長度都是最長得單調減小的子串行的數量」。

輸入第 11 行為乙個整數 nn,表示輸入的整數序列的長度(1 \leq n \leq 50001≤n≤5000)。接下來會輸入 nn 個整數(可能為一行或多行),每個整數都在 3232 位帶符號長整型範圍內。

輸出包括一行,為兩個數字,分別為針對給定的整數序列求出的「最長的單調減小的子串行的長度」以及「值不同但長度都是最長得單調減小的子串行的數量」。

樣例輸入

12

68 69 54 64 68 64

70 67 78 62 98 87

樣例輸出

4 2
**:

#include

#include

long long a[5004],dp[5004];

int main()}}

//for(int i = 0; i //printf("%d ",dp[i]);

int sum = 0;

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

if(max == dp[i])

sum++;

printf("%d %d",max,sum);

}

計蒜客 最長不下降子串行

題目描述 第一行為n,表示n個數第二行n個數 最長不下降子串行的長度 n小於5000for each num maxint 31 2 3 3題目分析 輸入乙個長度為n的序列,求最長不下降子串行的長度 方法分析 動態規劃。dp i 表示以a i a i 為記錄序列的陣列 結尾的最長不下降子串行的長度。...

計蒜客 n 子棋

小 a 和小 b 在玩 nn 子棋,nn 子棋遊戲的規則是,兩人在乙個左上角是 1,1 1,1 右下角是 n,n n,n 的 n times nn n 棋盤中交替落子,只要有一方的 nn 個棋子在同一行或者同一列或者同一條對角線上,對方就輸了。遊戲由小 a 先手,一共進行了 mm 回合,請你來當裁判...

計蒜客 Max answer 單調棧 DP思想

題目傳送門 單調棧時,將每個值作為最小值尋找其左右最長能夠延伸的位置,再利用字首和陣列進行更新最大值 然後處理負數時,我們總是盡可能希望負數能夠和負數相乘,這樣才能最大化 include include include includeusing namespace std const int max...