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 43 2

Đ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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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]

Trang 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 con của A là một cách chọn ra trong A một số phần tử và giữ nguyên thứ tự

Yêu cầu: Tìm dãy con đơn điệu tăng của dãy A có độ dài lớn nhất

Dữ liệu vào: Cho từ file văn bản INCSEQ.INP

- Dòng đầu ghi số n

- Dòng thứ hai ghi n số a1, a2, , an cách nhau ít nhất một dấu cách

Kết quả: Ghi ra file văn bản INCSEQ.OUT

- Dòng đầu ghi độ dài của dãy con tìm được

- Các dòng tiếp theo, mỗi dòng ghi hai số tương ứng là chỉ số và giá trị của phần tử được chọn trong dãy A theo thứ tự từ đầu đến cuối

Ví dụ:

10

3 9 4 8 6 2 1 7 10 5

5

1 3

3 4

5 6

8 7

9 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 do Read(f,a[i]);

Close(f);

L[n+1]:=0;

For k:=n downto 1 do

Begin

m:=n+1;

For i:=k+1 to n do

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 do

If L[i]>L[m] then m:=i;

Assign(f,fout);

ReWrite(f);

Writeln(f,L[m]);

Repeat

Writeln(f,m,' ',a[m]);

m:=Truoc[m];

Trang 2

Until m>n;

Close(f);

End

Trong siêu thị có n gói hàng đánh số từ 1 đến n (n≤1000), gói hàng thứ i có trọng lượng Wi ≤1000 và giá trị Vi ≤1000 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ỏi tên trộm sẽ lấy đi những gói hàng nào để được tổng giá trị lớn nhất?

Dữ liệu vào: Cho từ file văn bả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 và Vi

Kết quả: Ghi ra file văn bản BAG.OUT

- Dòng đầu ghi giá trị lớn nhất tên trộm có thể lấy được

- Dòng thứ hai ghi chỉ số của những gói hàng bị lấy theo thứ tự chỉ số từ nhỏ đến lớn

Ví dụ:

5 11

3 3

4 4

5 4

9 10

4 4

11

1 2 5

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 do Readln(f,W[i],V[i]);

Close(f);

For i:=1 to n do

For j:=1 to M do

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);

Writeln(f,T[n,M]);

j:=M;

Trang 3

For i:=n downto 1 do

If T[i,j]<>T[i-1,j] then

Begin

V[i]:=0;

j:=j-W[i];

End;

For i:=1 to n do

If V[i]=0 then Write(f,i,' ');

Close(f);

End

Một xâu ký tự Y gọi là xâu con của xâu ký tự X nếu như có thể xóa bớt một số ký

tự trong xâu X (hoặc có thể không xóa) để được xâu Y

Cho hai xâu ký tự A, B có độ dài không quá 1000 ký tự 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

Dữ liệu vào: Cho từ file văn bản SUBSTR.INP

- Dòng đầu ghi xâu A

- Dòng thứ hai ghi xâu B

Kết quả: Ghi ra file văn bản SUBSTR.OUT

- Dòng đầu ghi độ dài xâu S

- Dòng thứ hai ghi xâu S

Ví dụ:

acbadcbce

badcabacd

6 badcbc

Cho một bảng A kích thước m x n ô vuông, mỗi ô chứa một số nguyên Một người xuất phát từ một ô nào đó của cột 1 cần đi sang cột n (tại ô nào cũng được) với quy tắc đi: từ ô A[i,j] chỉ được quyền di chuyển sang một trong 3 ô A[,i,j+1], A[i-1,j+1], A[i+1,j+1] Hãy tìm vị trí ô xuất phát và hành trình đi từ cột 1 sang cột n sao cho tổng các số của các ô đi qua là lớn nhất

Dữ liệu vào: Cho từ file văn bản MOVE.INP

- Dòng đầu ghi hai số nguyên m, n (1 ≤ m,n ≤ 5000)

- Dòng thứ i trong số m dòng tiếp theo ghi n số, số thứ j tương ứng giá trị

số ghi trong ô A[i,j] (-30000 ≤ A[i,j] ≤ 30000)

Kết quả: Ghi ra file văn bản MOVE.OUT

- Dòng đầu ghi tổng các ô thuộc hành trình

- Dòng thứ hai ghi n số tương ứng với chỉ số dòng của các ô thuộc hành trình theo thứ tự từ trái sang phải

Ví dụ:

Trang 4

MOVE.INP MOVE.OUT

4 5

1 3 5 3 2

7 2 4 8 7

5 4 6 7 5

2 9 3 2 1

35

3 4 3 2 2

Giải thích: hành trình (3,1) → (4,2) → (3,3) → (2,4) → (2,5)

BÀI 5: BÀI TOÁN DÃY CON CÓ TỔNG CHIA HẾT CHO K DIVISIBLE.PAS

Cho một dãy gồm n (1≤n≤1000) số nguyên dương A1, A2, , An và số nguyên dương K (1≤Ai≤109, 1≤K≤50) Hãy tìm một dãy con gồm nhiều phần tử nhất của dãy đã cho sao cho tổng các phần tử của dãy con này chia hết cho K

Dữ liệu vào: Cho từ file văn bản DIVISIBLE.INP

- Dòng đầu ghi haisố n, K

- Dòng thứ hai ghi n số a1, a2, , an cách nhau ít nhất một dấu cách

Kết quả: Ghi ra file văn bản DIVISIBLE.OUT

- Dòng đầu ghi độ dài của dãy con tìm được

- Các dòng tiếp theo, mỗi dòng ghi hai số tương ứng là chỉ số và giá trị của phần tử được chọn trong dãy A theo thứ tự từ đầu đến cuối

Ví dụ:

7 5

6 10 1 5 16 15 4 51 6

2 10

4 5

6 15

7 4

1 3 5 3 2

7 2 4 8 7

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

🧩 Sản phẩm bạn có thể quan tâm

w