1 [Lời giải]Bỏ đi ít phần tử nhất, sao cho phần còn lại là dãy không giảm Fri Jun 17, 2011 9:51 pm
mrP
Thành viên cao cấp
Cho một dãy các số nguyên x1, x2,..., xn. Hãy tìm cách bỏ đi ít số nhất để sao cho phần còn lại là dãy không giảm.
FOR i:= 0 to n do sh(i):= 0;
x0 := -∞;
max:= 0;
FOR i:= 1 to n-1 do
FOR j := i+1 to n do
if xi ≤ xj THEN
if sh(j)<= sh(i) THEN sh(j):= sh(i)+1;
if sh(j) > max THEN max := sh(j);
{Ghi những giá trị xi bị loại ra khỏi dãy}
k:= max;
i:= n;
WHILE sh(i) ≠ max do
write xi;
i:= i-1;
tg:= xi;
WHILE k ≠ 0 do
if not (sh(i) = k - 1 and xi ≤ tg) THEN
write xi;
i := i - 1;
ELSE
k := k -1;
tg := xi;
FOR i:= 0 to n do sh(i):= 0;
x0 := -∞;
max:= 0;
FOR i:= 1 to n-1 do
FOR j := i+1 to n do
if xi ≤ xj THEN
if sh(j)<= sh(i) THEN sh(j):= sh(i)+1;
if sh(j) > max THEN max := sh(j);
{Ghi những giá trị xi bị loại ra khỏi dãy}
k:= max;
i:= n;
WHILE sh(i) ≠ max do
write xi;
i:= i-1;
tg:= xi;
WHILE k ≠ 0 do
if not (sh(i) = k - 1 and xi ≤ tg) THEN
write xi;
i := i - 1;
ELSE
k := k -1;
tg := xi;
Được sửa bởi mrP ngày Mon Aug 01, 2011 11:15 pm; sửa lần 1.