求乙個陣列的最長遞減子串行比如的最長遞減子串行為
分析:典型的動態規劃題目,對每乙個數計算由它開始的最大遞減子串行的個數,並存放到一張對映表中。例如對陣列a[n]有
……然後利用求得的對映表及最大子串行個數獲取原陣列中的元素。對於我們求得最大子串行個數為nmaxlen=5,表為ptable=。那麼ptable中以此找出nmaxlen,nmaxlen-1,…,1對應的原陣列的值即為最大遞減子串行。對應的為.複雜度為o(n2)
**如下
[cpp]view plain
copy
#include
#include
using
namespace
std;
intfun(
intain,
intptable,
intnlen)
} ptable[i] = 1+nmax;
nmaxlen = nmaxlen}
return
nmaxlen;
} void
printmaxsubsequence(
intain,
intptable,
intnmaxlen,
intnlen)
} cout <
}
測試**如下:
[cpp]view plain
copy
intmain()
; int
nlen =
sizeof
(ain)/
sizeof
(int
);
int* ptable =
newint
[nlen];
memset(ptable,0,nlen*sizeof
(int
));
intnmaxlen = fun(ain,ptable,nlen);
cout <
printmaxsubsequence(ain,ptable,nmaxlen,nlen);
delete
ptable;
return
0;
}
動態規劃 陣列中最長遞減子串行
求乙個陣列的最長遞減子串行比如的最長遞減子串行為 分析 典型的動態規劃題目,對每乙個數計算由它開始的最大遞減子串行的個數,並存放到一張對映表中。例如對陣列a n 有 然後利用求得的對映表及最大子串行個數獲取原陣列中的元素。對於我們求得最大子串行個數為nmaxlen 5,表為ptable 那麼ptab...
動態規劃之最長非遞減子串行
在乙個數字序列中,找到乙個最長的非連續子串行,使得這個子串行是不下降 非遞減 現有序列a 則a的最長不下降子串行是。如果有多個最長序列,只需選數字順位靠後的序列從大到小輸出。輸入2行 第一行乙個整數n,表示有n個整數的序列要輸入,n 1000 第二行共有n個整數。輸出最長的不下降子串行,只需選數字順...
最長遞減子串行
最長遞增子串行算過很多了?那我們這次來求個遞減的試試 第一行為乙個整數t,代表有t組測試資料。每組測試資料為乙個只含有字母和數字的字串 字串長度不超過1000 對於每組測試資料,輸出其最長遞減子串行的長度 要求以ascii碼進行比較且嚴格遞減 程式源 include using namespace ...