Bài tập & Bài giải chuyên đề 3: Quy hoạch động của thầy Lưu Quang Liêm

4 40 1
Bài tập & Bài giải chuyên đề 3: Quy hoạch động của thầy Lưu Quang Liêm

Đang tải... (xem toàn văn)

Thông tin tài liệu

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

Ngày đăng: 25/02/2021, 07:52

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan