最長不下降子串行 動態規劃

2021-07-09 12:09:29 字數 702 閱讀 2802

一。問題描述

給定乙個序列a1 a2 a3 ..... an現要求你從中找到最長的不下降子串行

二。問題分析

該問題可以和之前的max sum問題模擬,如果從決策的角度入手,直接引入並定義狀態f[i]為「a[i]所在子串行到i的長度」,那我們的決策策略應該就是使得「f[i]最大」,所以基於這個分析我們很容易列出動態轉移方程f[i]=max +1 (1<=j**:

//// main.cpp

// 最長不下降子串行

//// created by 張嘉韜 on 16/1/17.

//#include using namespace std;

int main(int argc, const char * argv)

for(int i=n-1;i>=1;i--)

a[i][1]=max+1;

a[i][2]=maxnum;

if(a[i][1]>flag) flag=a[i][1],flagnum=i;

}int k=flagnum;

cout<

a 1 2 3 4 5 6 4

f  1 2 3 4 5 6 ?

那麼這裡的f[7]應該選擇多少呢,很明顯應該是1,首先從直觀上是很明顯的事,但是隨著題目的抽象水平越來越高,有時憑直觀也許很難發現這個問題,另一方面,根據f[i]這個狀態的定義我們也能推理出來我們,應該把a[i]加入佇列

求最長不下降序列(動態規劃)

description 設有n n 1000 個不相同的整數 小於32767 組成的數列,記為 a1,a2,an,其中任意兩個數不相同。例如 3,18,7,14,10,12,23,41,16,24。若有 且有 則稱為長度為e的不下降序列。如上例中,3,18,23,24為乙個長度為4的不下降序列,同時...

動態規劃 最長不下降子串行

參考 每一次從頭掃瞄找出最佳答案。int a maxn d maxn intdp return ans 參考了這篇文章 那麼 如下 for int i 0 i n i scanf d a i memset dp,0x1f sizeof dp mx dp 0 for int i 0 i n i ans...

動態規劃 最長不下降子串行LIS

找出一組資料中最長的不下降子串行的長度。1,連續情況。即必須要求子數列連續相依 1 2 3 1 2 7 9中的最長子串行為3 1,2,3 易得遞推公式 if f i f i 1 dp i dp i 1 1 else dp i 1 includeusing namespace std define m...