Giải Subtask 1 Vét cạn tất cả các đường đi có thể trên bảng và cập nhật với kết quả lớn nhất.. Mỗi phương án có 9 bước.. Giải subtask 2 Sửa lại cách lấy tập giá trị.. Giải subtask 1 Khôn
Trang 1TRƯỜNG THPT CHUYÊN
TUYÊN QUANG
KỲ THI HSG CÁC TRƯỜNG THPT CHUYÊN KHU VỰC DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ
LẦN THỨ XIII, NĂM HỌC 2021 - 2022
ĐỀ THI MÔN: TIN HỌC 10
Câu 1: KHOBAU Trò chơi tìm kho báu
1.1 Giải Subtask 1
Vét cạn tất cả các đường đi có thể trên bảng và cập nhật với kết quả lớn nhất
Nghiệm: (x[1],y[1]) (x[2],y[2]) … (x[9],y[9]) với x[i], y[i] là tọa độ của ô ở bước thứ i
trên đường đi Mỗi phương án có 9 bước
Tập giá trị
* (x[1], y[1]) = (2, 2)
* (x[i], y[i]) (với 2 ≤ i ≤ 9) là 1 trong 4 ô kề với ô (x[i-1], y[i-1]) trước đó trên đường đi
và trước đó chưa đi qua
Dừng đệ quy: x[i],y[i] không có giá trị nào để nhận (không đi tiếp được)
Điều kiện nghiệm: nếu x[9],y[9] có giá trị thì cập nhật max.
1.2 Giải subtask 2
Sửa lại cách lấy tập giá trị
Tập giá trị
* (x[1], y[1]) là 1 trong 9 ô trên bảng x[1] = 1 3, y[1] = 1 3
* (x[i], y[i]) (với 2 ≤ i ≤ 9) là 1 trong 4 ô kề với ô (x[i-1], y[i-1]) trước đó trên đường đi
và trước đó chưa đi qua
Chú ý khởi tạo lại mảng cha[][] về 0 khi bắt đầu giải 1 test
Câu 2: HOICHO Hội chợ ẩm thực
2.1 Giải subtask 1
Không mất tổng quát ta có thể coi Bài toán được giải theo phương pháp qui hoạch động
Gọi là chi phí nhỏ nhất để phủ hết các gian hàng ta có
(*)
Trong đó là chi phí nhỏ nhất để phủ một tấm bạt che từ gian hàng đến gian hàng Có thể tính theo công thức:
Trang 1/2 HƯỚNG DẪN
ĐỀ THI ĐỀ XUẤT
Trang 2Độ phức tạp O(n 2 m)
2.2 Giải subtask 2
Mảng G có thể được chuẩn bị trước trong thời gian và do vậy độ phức tạp chung của thuật toán là
Câu 3: HVCON Hình vuông con
3.1 Giải subtask 1
Duyệt tất cả các hình vuông k*k, với mỗi hình vuông ta tìm min của hình đó và cập nhật giá trị max của toàn bộ bảng
3.2 Giải subtask 2
Gọi mảng ban đầu: a[][]
Sử dụng dequeue ta dễ dàng tạo được các mảng:
Tạo mảng mới b[][] sao cho b[i][ j] là giá trị nhỏ nhất của đoạn a[i-k+1, j], a[i-k+2, j],
…, a[i, j];
Tạo mảng mới c[][] sao cho c[i][j] là giá trị nhỏ nhất của đoạn b[i, j-k+1], b[i, j-k+2],
…, b[i, j]
1 5 6 3 7 b[1][4] = 3
9 9 2 3 3 b[2][4] = 2
2 2 2 2 2 b[3][4] = 2
1 1 2 5 6 b[4][4] = 1
4 9 6 7 8 b[5][4] = 6
Khi đó c[i][j] chính là giá trị nhỏ nhất của hình vuông *k k có góc phải dưới là (i, j).
Giá trị lớn nhất của c[i][j] ( k <= i <= m && k <= j <= n ) chính là kết quả bài toán
Trang 2/2
c[3][4] = 2 c[4][4] = 1 c[5][4] = 1