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ất một dấu cách

Kết quả: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ồm N số phân biệt AN = {a1, a2, .., aN } và số tự nhiên K (K<=N<=100). Ta gọi một dãy con tăng dần bậc K của dãy số AN là một dãy các số gồm K phầ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ác dãy con tăng dần bậc K của dãy số AN.

Input:

Dòng đầu tiên ghi số bộ test, không lớ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ố NK tươ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ại N số 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ậc K của dãy số AN. Ví du ̣: 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)