?? p1098m.pas.bak
字號:
{
思路非常簡單:從左求一遍最長不連續遞增子序列,再從右求一遍,二者相加(多加了一個本身)求最大值得max,max需要減1(減去一個本身)然后用n-max
最長不連續遞增序列狀態轉移方程:ll[j]:=max(ll[j],ll[k]+1); 1<=k<j if a[k]<a[j]
ll[j]代表以j為尾的最大不連續遞增序列長度
}
program p1098;
const
MAXN=1000;
var
a:array[1..MAXN] of integer;
left,right:array[1..MAXN] of integer;
n,i,j,k,m:integer;
function max1(a,b:integer):integer;
begin
if a>=b then max1:=a
else max1:=b;
end;
begin
readln(n);
for i:=1 to n do
read(a[i]);
{for i:=1 to n do begin
left[i]:=1;
right[i]:=1;
end;}
{->從左往右遞推}
left[1]:=1;
for j:=2 to n do begin
for k:=1 to j-1 do begin
if a[k]<a[j] then
left[j]:=max1(left[j],left[k]+1);
end;
end;
{<-從右往左遞推}
right[n]:=1;
for j:=n-1 downto 1 do begin
for k:=n downto j+1 do begin
if a[k]<a[j] then
right[j]:=max1(right[j],right[k]+1);
end;
end;
m:=0;
for i:=1 to n do begin
if m<left[i]+right[i] then
m:=left[i]+right[i];
end;
writeln(n-m+1);
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -