最長公共上公升字串 Pascal

時間 2025-05-10 18:37:34

1樓:

n<3000的遊碧御不會,不過n<300的還是可以寫的:

var i,j,k,n:longint;

f:array[0..300,0..300,0..300]of integer;

a,b:array[1..300]of integer;

function max(a,b:integer):integer;

beginif(a>神巖慧逗b)then exit(a);

exit(b);

end;begin

readln(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do read(b[i]);

for k:=1 to 300 do beginfor i:=1 to n do beginfor j:

1 to n do beginif(a[i]=b[j])and(a[i]endelse begin

f[i,j,k]:=max(f[i-1,j,k],f[i,j-1,k]);

end;end;

end;end;

writeln(f[n,n,300]);

end.

lcis最長公共上公升子序列pascal

2樓:網友

有o(n*log(n))的演算法,只要用陣列保留長度為下標的序列 的最小值,從右想左掃,同時更新,在、查詢的時候用二分。具體找下關鍵字,有很多人留下了不錯的文章,至於n^3 的演算法簡直是浪費時間,沒必要學,

pascal 最長的字串型別是什麼

3樓:網友

pchar:無限長度(無法直接物型使用字串函式)

ansistring:2g長罩攜猜度(與隱緩一般字串用法相同,只不過不能wacthes)

(最長)公共子串怎麼用pascal語言編?

4樓:網友

動態規劃。

樓上的未免太慢了吧。

program test;

vars1,s2:string;

i,j,best,p,q,r:longint;

a:array[0..300,0..300] of longint;

beginread(s1); readln;

read(s2);

for i:=1 to length(s1) dofor j:=1 to length(s2) dobegin

if s1[i]=s2[j] then

beginbest:=0;

p:=a[i-1,j-1]+1;

q:=a[i,j-1];

r:=a[i-1,j];

if p>q then best:=p else best:=q;

if r>best then best:=r;

a[i,j]:=best;

endelse

beginbest:=0;

p:=a[i,j-1];

q:=a[i-1,j];

if p>q then best:=p else best:=q;

a[i,j]:=best;

end;end;

writeln(a[length(s1),length(s2)])

end.

最長上公升序列 pascal 動態

5樓:天ぅ殤

第五個是二好不好,二自己本身算乙個,然後前面的一也算乙個,共兩個。

最長公共子序列ii pascal

6樓:夢中碧浪

這道題可以用貪心的思路在o(n)的時間內做出來。

因為序列是環,首先把序列複製一遍加在序列尾部,然後列舉i=1->2*n,用s記錄以i為結尾的已知序列取得的最大值,列舉i時,將序列的第i位加到s上,一旦s<0,則將s賦值為0。全過程用max記錄s曾經取得的最大值,注意長度不能超過n。

如何編「最長上公升子序列」?((pascal)要遞迴)

7樓:網友

vari,j,k,m,n:longint;

a:array[1..1000] of longint;

f:array[1..1000] of longint;

beginreadln(n);

for i:= 1 to n do

read(a[i]);

for i:= 1 to n do

beginm:=0;

for j:= 1 to i-1 do

if (a[i]>a[j]) and (f[j]>m) then m:=f[j];

f[i]:=m+1;

end;m:=0;

for i:= 1 to n do

if f[i]>m then m:=f[i];

writeln(m);

這個題是標準的動態規劃,不要複雜化了。

8樓:雨後de殺戮

動態規劃解法。

f[1]:=1;

max:=f[1];

for i:=2 to n do

beginfor j:=1 to i-1 doif (a[j]f[i]) then f[i]:=f[j];(找最大的f[j]);

f[i]:=f[i]+1;(如果前面沒有比a[i]大的則f[i]=1否則為f[i]+1);

end;writeln(max);

end.

pascal 組合字串

9樓:網友

其實我不是很明白題目的意思。

var n,k,i,j,sum:longint;

b:array[1..26] of boolean;

temp:char;

s:string;

procedure f(s0:string);

var i:longint;

beginif sum=k then exit;

if length(s0)=4 then beginwriteln(s0);

inc(sum);

exit;end;

for i:=1 to n do beginif b[i] then continue;

b[i]:=true;

f(s0+s[i]);

b[i]:=false;

end;end;

beginreadln(n,k);

readln(s);

for i:=1 to length(s) dofor j:=i+1 to length(s) do if s[i]>s[j] then begin

temp:=s[i]; s[i]:=s[j]; s[j]:=temp;

end;f('');

end.