You are on page 1of 5

MỘT SỐ BÀI TẬP QUY HOẠCH ĐỘNG

Bài 1. 1Dãy con chung dài nhất (Tên file LCS.*)

Cho 2 số nguyên dương 𝑚, 𝑛 (0 < 𝑚, 𝑛 < 103 ) và hai dãy số nguyên 𝐴: {𝑎1 , 𝑎2 , … , 𝑎𝑚 } và
𝐵: {𝑏1 , 𝑏2 , … , 𝑏𝑛 }. Tìm một dãy dài nhất là dãy con chung của hai dãy số 𝐴, 𝐵 nhận được từ 𝐴 bằng
cách xóa đi một số phần tử và cũng nhận được từ 𝐵 bằng cách xóa đi một số phần tử.

Dữ liệu: Vào từ file văn bản LCS.INP gồm 3 dòng

- Dòng đầu tiên ghi 2 số 𝑚, 𝑛 lần lượt là độ dài dãy 𝐴 và 𝐵.


- Dòng thứ hai ghi số 𝑚 số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑚 (|𝑎𝑖 | ≤ 109 )
- Dòng cuối cùng ghi 𝑛 số nguyên dương 𝑏1 , 𝑏2 , … , 𝑏𝑛 (|𝑏𝑖 | ≤ 109 )

Kết quả: Ghi ra file văn bản LCS.OUT gồm 2 dòng

- Dòng đầu tiên ghi số lượng phần tử của dãy con chung dài nhất.
- Dòng thứ 2 ghi các phần tử của dãy con chung dài nhất tìm được.

Ví dụ:

LCS.INP LCS.OUT
6 7 2
2 1 8 3 5 3 1 5
9 4 1 5 7 6 2

Bài 2*. Mức hao phí (Tên file COST.*)

Cho dãy số nguyên 𝐴: {𝑎1 , 𝑎2 , … , 𝑎𝑛 } gồm 𝑛 phần tử. Dãy số 𝐵 được sinh ra từ dãy 𝐴 theo qui tắc
như sau: ∀𝑖 = 1 … 𝑛, 1 ≤ 𝑏𝑖 ≤ 𝑎𝑖 . Ta định nghĩa mức hao phí sinh dãy 𝐵 từ dãy 𝐴 là
𝑛

𝑆 = max{∑ |𝑏𝑖 − 𝑏𝑖−1 |}


𝑖=1

Chẳng hạn, dãy 𝐴: {1,2,3}, khi đó

- Với 𝑎1 = 1, ta có 1 ≤ 𝑏1 ≤ 1 nên 𝑏1 = 1
- Với 𝑎2 = 2, ta có 1 ≤ 𝑏2 ≤ 2 nên 𝑏2 = 1, 2
- Với 𝑎3 = 3, ta có 1 ≤ 𝑏3 ≤ 3 nên 𝑏3 = 1, 2, 3

Như vậy dãy 𝐵 có thể là

- 𝐵: {1, 1, 1} và 𝑆 = 0
- 𝐵: {1, 2, 1} và 𝑆 = 2
- 𝐵: {1, 2, 2} và 𝑆 = 1

1
Xem hướng dẫn tại Tài Liệu Chuyên Tin Quyển 1 – Hồ Sĩ Đàm chủ biên
- 𝐵: {1, 2, 3} và 𝑆 = 2

Vậy mức hao phí sinh dãy 𝐵 là 2

Yêu cầu: Cho dãy số nguyên 𝐴, hãy tìm mức hao phí sinh dãy 𝐵 tương tứng.

Dữ liệu: Vào từ file văn bản COST.INP gồm 2 dòng

- Dòng đầu tiên ghi số nguyên dương 𝑛 là số phần tử dãy 𝐴 (𝑛 ≤ 105 )


- Dòng thứ 2 ghi các số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 mỗi số ghi cách nhau bởi khoảng trắng (|𝑎𝑖 | ≤
106 )

Kết quả: Ghi ra file văn bản COST.OUT gồm duy nhất dòng chứa mức hao phí sinh dãy 𝐵

Ví dụ:

COST.INP COST.OUT
3 2
1 2 3
5 396
100 2 100 2 100
5 50
3 15 4 12 10
3 12
4 7 9

Bài 3*. Sinh mảng (Tên file ARRAY.*)

Cho 3 số nguyên 𝑛, 𝑘, 𝑥. Hãy tìm số cách sinh ra một mảng các số nguyên thỏa mãn các điều kiện
sau

- Các phần tử liên tiếp trong mảng phải khác nhau, mảng gồm 𝑛 phần tử
- Phần tử đầu tiên cuả mảng là 1 và phần tử cuối cùng là 𝑥
- Các phần tử của mảng phải có giá trị thuộc đoạn [1; 𝑘 ]

Dữ liệu: Vào từ file văn bản ARRAY.INP gồm duy nhất dòng chứa 3 số nguyên 𝑛, 𝑘, 𝑥 mỗi số ghi
cách nhau bởi khoảng trắng (1 ≤ 𝑛 ≤ 105 , 2 ≤ 𝑘 ≤ 105 , 1 ≤ 𝑥 ≤ 𝑘)

Kết quả: ghi ra file văn bản ARRAY.OUT gồm duy nhất dòng là số cách sinh mảng thỏa điều kiện
đề bài (kết quả lấy modulo 109 + 7)

Chú ý: 20% số test ứng với 𝑛 ≤ 103 , 𝑘 ≤ 102

Ví dụ:

ARRAY.INP ARRAY.OUT

4 3 2 3

Bài 4. Nhân ma trận (Tên file MATRIX.*)


Ma trận 2 chiều cấp 𝑚 × 𝑛 thực tế mảng 2 chiều gồm 𝑚 dòng và 𝑛 cột. Cho hai ma trận A cấp
𝑚 × 𝑛 và ma trận B cấp 𝑛 × 𝑝 . Phép nhân 2 ma trận A, B kết quả là một ma trận C cấp 𝑚 × 𝑝 với
mỗi phần tử 𝑐𝑖𝑗 = 𝑎𝑖1 ∗ 𝑏1𝑗 + 𝑎𝑖2 ∗ 𝑏2𝑗 + ⋯ + 𝑎𝑖𝑛 ∗ 𝑏𝑗𝑛 ; 𝑖 = 1 … 𝑚, 𝑗 = 1 … 𝑝

Yêu cầu: Cho hai ma trận A, B. Hãy tính và in ra ma trận C là kết quả nhân A và B (1 ≤ 𝑚, 𝑛, 𝑝 ≤
102 )

Dữ liệu: Vào từ file văn bản MATRIX.INP gồm 𝑚 + 𝑛 + 2 dòng

- Dòng đầu tiên ghi 2 số nguyên 𝑚, 𝑛 là kích thước ma trận A


- Trong 𝑚 dòng tiếp theo mỗi dòng ghi 𝑛 số nguyên, có giá trị tuyệt đối không vượt quá 103
- Dòng thứ 𝑚 + 2 ghi 2 số nguyên 𝑛, 𝑝 là kích thước ma trận B
- 𝑛 dòng sau cùng mỗi dòng ghi 𝑝 số nguyên, có giá trị tuyệt đối không vượt quá 103

Kết quả: Ghi ra file văn bản MATRIX.OUT gồm 𝑚 dòng là kết quả của phép toán nhân ma trận
nói trên.

Bài 5. Tam giác số (Tên file TGS.*)

Hình bên mô tả một tam giác có số hàng 𝑁 = 5. Đi từ đỉnh (số 7) đến đáy tam giác bằng một đường
gấp khúc, mỗi bước chỉ được đi từ số ở trên xuống một trong hai số đứng kề phải hay bên trái hàng
dưới và tính tích các số trên đường đi lại thành một tích.
7
3 8
8 1 0
2 7 4 4
4 5 -2 6 5

Ví dụ: đường đi 7 8 1 4 6 có tích S = 1344. Đường đi 7 3 1 7 5 có tích S = 735.

Yêu cầu: cho tam giác số, tìm tich của đường đi có tích lớn nhất.

Dữ liệu: Vào từ file văn bản TGS.INP gồm 𝑛 + 1 dòng

- Dòng đầu tiên ghi số nguyên dương 𝑛, 𝑛 ≤ 101


- Dòng thứ 2 đến dòng thứ 𝑛 + 1: dòng thứ 𝑖 có 𝑖 − 1 số cách nhau bởi dấu cách (các số có
gia trị tuyệt đối không vượt quá 100)

Kết quả: Ghi ra file văn bản TGS.OUT có một số nguyên là tích lớn nhất tìm được.

Ví dụ:
TGS.INP TGS.OUT

5 5880
7
3 8
8 1 0
2 7 4 4
4 5 -2 6 5

Bài 62. Dãy con đơn điệu tăng dài nhất (Tên file LCS.*)

Cho dãy số nguyên 𝐴 = 𝑎1 , 𝑎2 , … , 𝑎𝑛 (𝑛 ≤ 103 , −104 ≤ 𝑎𝑖 ≤ 104 ). Một dãy con của 𝐴 là một
cách chọn ra trong 𝐴 một số phần tử giữ nguyên thứ tự. Như vậy 𝐴 có 2𝑛 dãy con.

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

Dữ liệu: Vào từ file văn bản SUBSEQ.INP gồm 2 dòng

- Dòng đầu tiên ghi số nguyên dương n là độ dài dãy ban đầu
- Dòng tiếp theo ghi n số nguyên 𝑎𝑖 , mỗi số ghi cách nhau bởi khoảng trắng.

Kết quả: ghi ra file văn bản SUBSEQ.OUT gồm

- Dòng đầu tiên ghi số phần tử của dãy tìm được


- Các dòng tiếp theo ghi phần tử của dãy tìm được.

Ví dụ: Dãy số nguyên 𝐴 = {1, 2, 3, 4, 9, 10, 5, 6, 7, 8}, dãy con đơn điệu tăng dài nhất là

{1, 2, 3, 4, 5, 6, 7, 8}

Bài 7. Dãy con lồi (Tên file CSEQ.*)

Dãy số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 được gọi là dãy lồi nếu nó tăng từ 𝑎1 đến 𝑎𝑖 nào đó rồi giảm dần đến
𝑎𝑛

Ví dụ: Dãy số -1 4 6 8 12 10 5 4 2 là dãy số lồi.

Yêu cầu: Cho dãy số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 , bằng cách xóa đi một số phần tử của dãy và giữ nguyên
thứ tự các phần tử còn lại, ta nhận được dãy con lồi dài nhất.

Dữ liệu: Vào từ file văn bản CSEQ.INP gồm

2
Tham khảo hướng dẫn tại Tài liệu chuyên Tin học quyển 1, Hồ Sĩ Đàm - chủ biên
- Dòng đầu tiên ghi số nguyên dương 𝑛 là số phần tử của dãy (𝑛 ≤ 104 )
- Các dòng sau ghi 𝑛 số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 là các phần tử của dãy số. (|𝑎𝑖 | ≤ 109 )

Kết quả: Ghi ra file văn bản CSEQ.OUT gồm các dòng

- Dòng đầu tiên ghi số nguyên dương là số phần tử của dãy con tìm được
- Các dòng tiếp theo ghi các phần tử thuộc dãy tìm được.

Hướng dẫn:

- Tìm dãy con đơn điệu tăng từ 𝑎1 , 𝑎2 , … , 𝑎𝑛 . Gọi 𝐿𝑖 là độ dài dãy con đơn điệu tăng dài
nhất của dãy 𝑎1 , 𝑎2 , … , 𝑎𝑖
- Tìm dãy con đơn điệu tăng từ 𝑎𝑛 , 𝑎𝑛−1 , … , 𝑎𝑖 . Gọi 𝑅𝑖 là độ dài dãy con đơn điệu tăng
dài nhất của dãy 𝑎𝑛 , 𝑎𝑛−1 , … , 𝑎𝑖
- Độ dài dãy con lồi dài nhất là giá trị lớn nhất của 𝐿𝑖 + 𝑅𝑖 − 1

Bài 8. Xâu con chung dài nhất

Xem đề và nộp bài tại https://vnoi.info/problems/QBSTR/

You might also like