codevs1058

类似于最长不下降子序列

type
  node=record
  up,data,down:longint;
end;
var
  i,j,t,n,max:longint;
  a:array[1..105]of node;
begin
  readln(n);
  for i:=1 to n do
  read(a[i].data);
  for i:=1 to n do
  begin
    for j:=1 to i-1 do
    if a[j].data<a[i].data then
    begin
      if a[j].up>=a[i].up then
      a[i].up:=a[j].up+1;
    end
  end;

  for i:=n downto 1 do
  begin
    for j:=n downto i+1 do
    if a[i].data>a[j].data then
    begin
      if a[j].down>=a[i].down then
      a[i].down:=a[j].down+1;
    end;
  end;
  for i:=1 to n do
  if (a[i].up+a[i].down)>max then max:=a[i].up+a[i].down;
  writeln(n-max-1);
end.

就是扫描两次。。

时间: 2024-10-23 06:01:40

codevs1058的相关文章

codevs1058 合唱队形==洛谷P1091 合唱队形

P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入输出格式 输入格式: 输入文件chorus.in的第一行是

【基础练习】【线性DP】codevs1058 合唱队形题解

题目来源:04NOIP提高组 先上题目 题目描述 Description N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的身高分别为T1,T2,-,TK,  则他们的身高满足T1<...<Ti>Ti+1>->TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入描述 Inpu