Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

可以不枚举中点不求LIS,超简短方法,见内:

Posted by lydliyudong at 2011-06-30 17:20:40 on Problem 1836 and last updated at 2011-06-30 17:21:47
In Reply To:99题纪念 变形lis Posted by:qqgyp at 2011-05-21 21:59:51
f[i,0]表示前i个,第i个必须在队里,到末尾为降序的最小出队人数。f[i,1]为升序。
直接动规一遍完事。
var
 a:array[0..1000]of real;
 f:array[0..1000,0..1]of longint;
 n,i,j,ans:longint;
function min(x,y:longint):longint;
 begin
  if x<y then exit(x) else exit(y);
 end;
begin
 readln(n);
 for i:=1 to n do read(a[i]);
 fillchar(f,sizeof(f),127);
 for i:=1 to n do
  for j:=0 to i-1 do
   begin
    if (a[j]<a[i])or(j=0) then f[i,1]:=min(f[i,1],f[j,1]+i-j-1);
    if (a[j]>a[i])or(j=0) then f[i,0]:=min(f[i,0],f[j,0]+i-j-1);
    if a[j]>=a[i] then f[i,0]:=min(f[i,0],f[j,1]+i-j-1);
   end;
 ans:=maxlongint;
 for i:=1 to n do
  ans:=min(ans,min(f[i,1],f[i,0])+n-i);
 writeln(ans);
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator