最长不上升序列长度的Pascal代码

来源:百度知道 编辑:UC知道 时间:2024/06/27 08:44:12
DP,一定要Pascal的。
给我个最长不上升序列长度的Pascal代码。
要求最长不上升序列长度的DP代码,Pascal语言的。

说明:n为数字个数,m数组保存读入的数,best为序列的最大长度,f数组保存前i个数所能达到的最长的不升子序列长度.
program p1217;
const
maxn=100;
var
m,f:array[1..maxn] of integer;
n,k:integer;
procedure task1;
var
best,i,j:integer;
begin
for i:=1 to n do
f[i]:=1;{每一个数字到自己的长度为一}
for i:=n-1 downto 1 do
for j:=i+1 to n do
if (m[i]>=m[j])and(f[j]+1>f[i]) then
f[i]:=f[j]+1;{如果这个数比前一个小或等于,而且连到他的长度更长,则加一个长度}
best:=0;
for i:=1 to n do
if f[i]>best then best:=f[i];
writeln(best);
end;
begin
read(n);
for i:=1 to n do
read(m[i]);{读入数据}
task1;
end;

是不是最长递降子序列?
给你一道这个类型的题吧!
合唱队形
(chorus.pas/dpr/c/cpp)
【问题描述】
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K)。
你的任务是,已知所有N位同学的身高,计算最少需要几