1. Trang chủ
  2. » Hóa học

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 10,21 KB

Nội dung

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

w