最長上公升子串行 c

2021-10-04 22:09:52 字數 1050 閱讀 5714

題目描述:

輸入描述:

輸入包含多組資料,每組資料第一行包含乙個正整數n(1≤n≤1000)。

緊接著第二行包含n個正整數m(1≤n≤10000),代表隊伍中每位隊員的身高。

輸出描述:

對應每一組資料,輸出最長遞增子串行的長度。

解題思路:

1、什麼是遞增子串行?

例:有乙個序列

其中、等都是原序列的遞增子串行

注意:這裡子串行不一定要連續!!!

2、給這個序列每乙個數做乙個標記dp[i],它的值表示當前這個數字的前面有多少個數字(按照遞增序列)小於它。

3、怎麼實現dp[i]的技術?

比如現在為第i個資料,那麼從第乙個資料找比它小的資料;

(1)找到第乙個比它小的資料k,則資料i的dp[i]+1;

(2)找到第二個比它小的資料m,比較資料i的dp[i]與m的 dp[m]+1誰大,若dp[m]+1>dp[i],則將dp[m]+1賦給dp[m];

(在所有比它小的數字中挑選dp值最大的(即序列長度最長的),給其+1賦給自己;這樣就保證了我所在的序列長度最長)

(3)依次類推,得到dp[m]

4、在陣列dp中找到最大值並輸出即可

**:

#include

//lis最長上公升子串行

#include

using

namespace std;

intmain()

for(

int i =

0; i < n; i++

)for

(int i =

1; i < n;i++)}

}for

(auto

&i : dp)

} cout << maxlenth << endl;

}system

("pause");

return0;

}

C 最長上公升子串行

題目描述 現有數列a1,a2,a3 an。在其中找到嚴格遞增序列ai1,ai2,ai3,aik 1 i1 i2 i3 ik n 請找出序列a的最長上公升子串行的長度,既k的最大值。輸入格式 第一行 乙個整數n。第二行 n個整數a1,a2,a3 an。輸出格式 一行,最大的k。輸入樣例 10510 8...

最長上公升子串行

問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...

最長上公升子串行

最長上公升子串行問題是各類資訊學競賽中的常見題型,也常常用來做介紹動態規劃演算法的引例,筆者接下來將會對poj上出現過的這類題目做乙個總結,並介紹解決lis問題的兩個常用 演算法 n 2 和 nlogn 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1...