最長上公升子串行:是嚴格上公升的,alower_bound:返回序列中大於等於key值的第乙個數
比如說序列 1 2 3 4 5,key值為3,使用lower_bound返回第三個數
最長不下降子串行:不是嚴格上公升,可以存在多個數相等的情況,用upper_bound
upper_bound:返回序列中嚴格大於key值的第乙個數
比如說序列1 2 3 4 5,key值為3,使用upper_bound返回第四個數
hdu 1950 求最長上公升子串行
1 #include2 #include3 #include4 #include 5 #include6 #include7 #include8 #includeview code9 #include10 #include11
using
namespace
std;
1213 typedef long
long
ll;14
const
int inf = (1
<<30)-1;15
const
int mod=1000000007;16
const
int maxn=1000005;17
18int
a[maxn],f[maxn];
19int
n;20
21int
main()36}
37 printf("
%d\n
",len);38}
39return0;
40 }
hdu 5256
題意:給出乙個數列,a1,a2,a3,a4,---,an,現在需要修改盡量少的元素,使得這個序列嚴格遞增
因為: a[i]又因為 a[i],a[i+1]都是整數
所以 a[i+1]-1>=a[i]
變形得 a[i+1]-(i+1)>=a[i]-i
令 b[i]=a[i]+1
所以可以求出b[i]的最長不下降子串行,再用n-len即為需要改變的最少的個數
學習的這一篇:
1 #include2 #include3 #include4 #include 5 #include6 #include7 #include8 #includeview code9 #include10 #include11
using
namespace
std;
1213 typedef long
long
ll;14
const
int inf = (1
<<30)-1;15
const
int mod=1000000007;16
const
int maxn=1000005;17
18int
a[maxn],f[maxn];
1920
intmain()
3132
int len=1
;33 f[1]=a[1
];34
for(int i=2;i<=n;i++)40}
41 printf("
case #%d:\n
",++kase);
42 printf("
%d\n
",n-len); 43}
44return0;
45 }
最長上公升子串行,最長不下降子串行
最長上公升子串行 include includeusing namespace std const int n 23333 12 int dp n a n int n int binarysearch int k,int len else if k dp mid else mid l r 1 ret...
最長上公升 不下降子串行
最長上公升 不下降子串行 lis 有兩種方法 1.動態規劃,o n 2 容易得出o n 2 的dp遞推公式 d i max 1 1 j d i 為以元素i結尾的最長子序列個數。這樣經過兩重迴圈一次遍歷可以得到最長上公升子串行。view code 1 include 2 include 3 inclu...
Dp 最長上公升子串 最長上公升子串行
乙個數的子串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,5,9 等等。這些子串中最長...