題目描述:
輸入描述:
輸入包含多組資料,每組資料第一行包含乙個正整數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...