Một tên trộm đột nhập vào siêu thị mang theo một cái túi có thể mang được tối đa trọng lượng M ≤1000... Hãy tìm một xâu ký tự S dài nhất sao cho S là xâu con của cả hai xâu A và B.[r]
(1)BÀI 1: DÃY CON ĐƠN ĐIỆU TĂNG DÀI NHẤT INCSEQ.PAS Cho dãy số nguyên A = a1, a2, , an (1≤n≤5000, -10000≤ai≤10000) Một dãy A cách chọn A số phần tử giữ nguyên thứ tự
Yêu cầu: Tìm dãy đơn điệu tăng dãy A có độ dài lớn
Dữ liệu vào: Cho từ file văn INCSEQ.INP
- Dòng đầu ghi số n
- Dòng thứ hai ghi n số a1, a2, , an cách dấu cách
Kết quả: Ghi file văn INCSEQ.OUT
- Dịng đầu ghi độ dài dãy tìm
- Các dòng tiếp theo, dòng ghi hai số tương ứng số giá trị phần tử chọn dãy A theo thứ tự từ đầu đến cuối
Ví dụ:
INCSEQ.INP INCSEQ.OUT
10
3 10
5 3 10 Const fin ='INCSEQ.INP';
fout='INCSEQ.OUT';
Var L,Truoc,a:array[1 5001] of integer; n,m,i,k:integer;
f:text; Begin
Assign(f,fin); Reset(f); Readln(f,n);
For i:=1 to n Read(f,a[i]); Close(f);
L[n+1]:=0;
For k:=n downto Begin
m:=n+1;
For i:=k+1 to n
If (a[k]<a[i]) and (L[i]>L[m]) then m:=i; L[k]:=L[m]+1;
Truoc[k]:=m; End;
m:=1;
For i:=2 to n
If L[i]>L[m] then m:=i; Assign(f,fout);
ReWrite(f); Writeln(f,L[m]); Repeat
(2)Until m>n; Close(f); End
BÀI 2: BÀI TOÁN CÁI TÚI (A) BAG.PAS
Trong siêu thị có n gói hàng đánh số từ đến n (n≤1000), gói hàng thứ i có trọng lượng Wi ≤1000 giá trị Vi ≤1000 Một tên trộm đột nhập vào siêu thị mang theo túi mang tối đa trọng lượng M ≤1000 Hỏi tên trộm lấy gói hàng để tổng giá trị lớn nhất?
Dữ liệu vào: Cho từ file văn BAG.INP
- Dòng đầu chứa hai số nguyên dương n, M
- n dòng tiếp theo, dòng thứ i ghi hai số nguyên dương Wi Vi
Kết quả: Ghi file văn BAG.OUT
- Dòng đầu ghi giá trị lớn tên trộm lấy
- Dòng thứ hai ghi số gói hàng bị lấy theo thứ tự số từ nhỏ đến lớn
Ví dụ:
BAG.INP BAG.OUT
5 11 3 4 10 4
11
Const fin ='BAG.INP'; fout='BAG.OUT';
Var W,V:array[1 1000] of Integer; T:array[0 1000,0 1000] of Longint; n,m,i,j,max:Longint;
f:Text; Begin
Assign(f,fin); Reset(f); Readln(f,n,m);
For i:=1 to n Readln(f,W[i],V[i]); Close(f);
For i:=1 to n For j:=1 to M Begin
max:=T[i-1,j]; If j>=W[i] then
If max<T[i-1,j-W[i]] + V[i] then max:=T[i-1,j-W[i]] +V[i]; T[i,j]:=max;
End;
Assign(f,fout); Rewrite(f);
(3)For i:=n downto If T[i,j]<>T[i-1,j] then Begin
V[i]:=0; j:=j-W[i]; End;
For i:=1 to n
If V[i]=0 then Write(f,i,' '); Close(f);
End
BÀI 3: BÀI TOÁN XÂU CON CHUNG DÀI NHẤT SUBSTR.PAS
Một xâu ký tự Y gọi xâu xâu ký tự X xóa bớt số ký tự xâu X (hoặc khơng xóa) để xâu Y
Cho hai xâu ký tự A, B có độ dài khơng q 1000 ký tự Hãy tìm xâu ký tự S dài cho S xâu hai xâu A B
Dữ liệu vào: Cho từ file văn SUBSTR.INP
- Dòng đầu ghi xâu A - Dòng thứ hai ghi xâu B
Kết quả: Ghi file văn SUBSTR.OUT
- Dòng đầu ghi độ dài xâu S - Dịng thứ hai ghi xâu S
Ví dụ:
SUBSTR.INP SUBSTR.OUT
acbadcbce badcabacd
6
badcbc
BÀI 4: BÀI TOÁN DI CHUYỂN TỪ TÂY SANG ĐƠNG MOVE.PAS
Cho bảng A kích thước m x n ô vuông, ô chứa số ngun Một người xuất phát từ cột cần sang cột n (tại ô được) với quy tắc đi: từ ô A[i,j] quyền di chuyển sang ô A[,i,j+1], A[i-1,j+1], A[i+1,j+1] Hãy tìm vị trí xuất phát hành trình từ cột sang cột n cho tổng số ô qua lớn
Dữ liệu vào: Cho từ file văn MOVE.INP
- Dòng đầu ghi hai số nguyên m, n (1 ≤ m,n ≤ 5000)
- Dòng thứ i số m dòng ghi n số, số thứ j tương ứng giá trị số ghi ô A[i,j] (-30000 ≤ A[i,j] ≤ 30000)
Kết quả: Ghi file văn MOVE.OUT
- Dịng đầu ghi tổng thuộc hành trình
- Dòng thứ hai ghi n số tương ứng với số dịng thuộc hành trình theo thứ tự từ trái sang phải
(4)MOVE.INP MOVE.OUT
1 7
35
3 2
Giải thích: hành trình (3,1) → (4,2) → (3,3) → (2,4) → (2,5)
BÀI 5: BÀI TỐN DÃY CON CĨ TỔNG CHIA HẾT CHO K DIVISIBLE.PAS Cho dãy gồm n (1≤n≤1000) số nguyên dương A1, A2, , An số nguyên dương K (1≤Ai≤109, 1≤K≤50) Hãy tìm dãy gồm nhiều phần tử của dãy cho cho tổng phần tử dãy chia hết cho K
Dữ liệu vào: Cho từ file văn DIVISIBLE.INP
- Dòng đầu ghi haisố n, K
- Dòng thứ hai ghi n số a1, a2, , an cách dấu cách
Kết quả: Ghi file văn DIVISIBLE.OUT
- Dòng đầu ghi độ dài dãy tìm
- Các dòng tiếp theo, dòng ghi hai số tương ứng số giá trị phần tử chọn dãy A theo thứ tự từ đầu đến cuối
Ví dụ:
DIVISIBLE.INP DIVISIBLE.OUT
7
6 10 16 15 4
5 10 15