Kỹ thuật qui hoạch động

Một phần của tài liệu Bài tập kỹ thuật lập trình TS nguyễn duy phương (Trang 75 - 80)

II. Lập trình dựa vào kỹ thuật duyệt và đệ qui

1.9. Kỹ thuật qui hoạch động

76

BÀI 2.5.1: XẾP HÀNG

Hàng ngày khi lấy sữa, N con bò của bác John (1 ≤ N ≤ 50000) luôn xếp hàng theo thứ tự không đổi. Một hôm bác John quyết định tổ chức một trò chơi cho một sốcon bò. Đểđơn

giản, bác John sẽ chọn ra một đoạn liên tiếp các con bò để tham dựtrò chơi. Tuy nhiên để trò chơi diễn ra vui vẻ, các con bò phải không quá chênh lệch về chiều cao.

Bác John đã chuẩn bị một danh sách gồm Q (1 ≤ Q ≤ 200000) đoạn các con bò và chiều cao của chúng (trong phạm vi [1, 1000000]). Với mỗi đoạn, bác John muốn xác định chênh lệch chiều cao giữa con bò thấp nhất và cao nhất. Bạn hãy giúp bác John thực hiện công việc này.

Dữ liệu

 Dòng đầu tiên chứa 2 số nguyên N và Q.

 Dòng thứ i trong số N dòng sau chứa 1 số nguyên duy nhất, là độ cao của con bò thứ i.

 Dòng thứ i trong số Q trong tiếp theo chứa 2 sốnguyên A, B (1 ≤ A ≤ B ≤ N), cho

biết đoạn các con bò từA đến B.

Kết quả

Gồm Q dòng, mỗi dòng chứa 1 số nguyên, là chênh lệch chiều cao giữa con bò thấp nhất và cao nhất thuộc đoạn tương ứng.

Ví dụ: Input.txt Output.txt 6 3 1 7 3 4 2 5 1 5 4 6 2 2 6 3 0

77

BÀI 2.5.2: ĐOẠN TĂNG

Cho dãy sốnguyên A = (a1, a2, …, an). Hãy tìm một đoạn dài nhất gồm các phần tử liên tiếp trong dãy A có thứ tự không giảm.

Quy ước: Đoạn chỉ gồm đúng 1 phần tửtrong A cũng được coi là có thứ tự không giảm.

Dữliệu:

Dòng 1 chứa số nguyên dương n ≤ 105

Dòng 2 chứa n số nguyên a1, a2, ..., an ("i: |ai| ≤ 109) cách nhau ít nhấtmột dấu cách

Kếtquả:một số nguyên duy nhất là số phần tử trong đoạn tìm được

Ví dụ:

INPUT OUTPUT

11

88 99 11 22 22 33 11 66 33 44 77

4

BÀI 2.5.3: ĐO ̣ ĐO

Hai xâu ký tự được gọi là đảo của nhau nếu ta có thể hoán vị các ký tự của một xâu để được xâu còn lại. Ví dụ: xâu “occurs” là đảo của xâu “succor”, tuy nhiên xâu “dear” không phải là đảo của xâu “dared” (vì chữ ‘d’ xuất hiện 2 lần trong “dared” nhưng chỉ xuất hiện “dear” trong 1 lần).

Độ đo giữa hai xâu ký tự là số ký tự ít nhất cần phải xóa (trên cả hai xâu) để hai xâu còn lại đảo của nhau. Ví dụ độ đo giữa hai xâu “sleep” và “leap” là 3, độ đo giữa hai xâu “dog” và “cat” là 6.

Yêu cầu:

Hãy tính độ đo giữa hai xâu cho trước.

Dữliệu:

Gồm hai dòng, mỗi dòng chứa một xâu ký tự chỉ gồm các chữ cái tiếng Anh thường, mỗi dòng có không quá 1 triệu ký tự.

78 Ví dụ INPUT OUTPUT Begin end 4

BÀI 2.5.4: DÃY CON TĂNG DA ̀N TỰ NHIÊN BA ̣C K

Cho dãy gồmNsố phân biệtAN = {a1, a2, .., aN} và số tự nhiên K (K<=N<=100). Ta gọi

mộtdãy con tăng dần bậc Kcủa dãy sốANlà một dãy các số gồmKphần tử trong dãy đó thỏa mãn tính chất tăng dần. Bài toán được đặt ra là hãy tìm số cácdãy con tăng dần bậc

Kcủa dãy sốAN.

Input:

Dòng đầu tiên ghi số bộ test, khônglớn hơn 100. Mỗi bộ test được xây dựng theo khuôn dạng sau:

 Dòng đầu tiên ghi lại hai sốNKtương ứng với số phần tử của dãy số và bậc của dãy con.

 Dòng kế tiếp ghi lạiNsố của dãy sốAN, các số trong dãy không lớn hơn 100.

Output:

Với mỗi bộ test, in ra màn hình số các dãy con tăng dần tự nhiên bậcKcủa dãy sốAN. Ví dụ: Input: 2 5 3 2 5 15 10 20 5 3 2 20 10 15 5 Output: 7 1

80

Một phần của tài liệu Bài tập kỹ thuật lập trình TS nguyễn duy phương (Trang 75 - 80)

Tải bản đầy đủ (PDF)

(180 trang)