1759 最長上公升子串行

2021-08-08 15:07:29 字數 1684 閱讀 6763

總時間限制: 

2000ms 

記憶體限制: 

65536kb

描述

乙個數的序列

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)等等。這些子串行中最長的長度是4,比如子串行(1, 3, 5, 8).

你的任務,就是對於給定的序列,求出最長上公升子串行的長度。

輸入輸入的第一行是序列的長度n (1 <= n <= 1000)。第二行給出序列中的n個整數,這些整數的取值範圍都在0到10000。

輸出最長上公升子串行的長度。

樣例輸入

7

1 7 3 5 9 4 8

樣例輸出

4

這是openjudge上的一道題目,

戳我檢視

——————————分析————————————

這是一道非常基礎的dp題,採用了dp最常見的「人人為我」思想,接下來讓我們看一看。

二維陣列的方法就不介紹了,接下來我們來看一看一位陣列(滾動陣列)。

我們用a陣列來表示原陣列,b陣列來表示從n開始到i字元的最長上公升子串行。因此公式為:

if

(a[j]>a[i]&&b[j]>b[i]) b[i]=b[j];

或者

b[i]=max(b[i],b[j]+1);

——————————**——————————

#include

int a[

1005

],b[

1005

],n,i,j,c[

1005]=;

//c陣列是用來輸出的

intmain

() b[i]++;

if(b[i]==

1)c[i]=-1;

if(b[i]>=max)

}printf

("%d\n"

,max);

/*do

這是輸出部分

while(start!=-1);*/

return0;

}

覺得有用就頂起來

戳我檢視跟多部落格

1759 最長上公升子串行

1759 最長上公升子串行 檢視 提交 統計 提問 總時間限制 2000ms 記憶體限制 65536kb 描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik...

1759 最長上公升子串行

name 1759 最長上公升子串行 author date 22 07 17 16 02 description 1759 最長上公升子串行 檢視 提交 統計 提問 總時間限制 2000ms 記憶體限制 65536kb 描述乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於...

1759 最長上公升子串行 動態規劃

描述 乙個數的序列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 等等。這...