Quy Hoạch Động Bitmask
CJ và Catalina
Nộp bàiSau khi làm nhiệm vụ cho nhóm C.R.A.S.H, thì giờ đây CJ đã không còn làm được gì, cả không thể về lại nơi cũ vì sẽ bị nhóm này truy sát. Trong lúc CJ đang đi quanh quẩn nơi đây thì vô tình gặp Catalina và cô gái này rất là hám tiền. CJ và Catalina bắt tay với nhau, và Catalina nhờ CJ giúp một công việc: Cướp hết ngân hàng nhỏ ở các khu vực nông thôn.
Ở vùng nông thôn San Andreas có \(N\) địa điểm, trong đó có \(K\) địa điểm là ngân hàng, đánh số từ \(1\) tới \(N\), và \(M\) con đường hai chiều, đánh số từ \(1\) tới \(M\), con đường thứ \(i\) có độ dài là \(L_{i}\). Catalina muốn CJ tìm đường đi sao cho xuất phát từ một ngân hàng, cướp hết tất cả \(K\) ngân hàng, mỗi con đường và một địa điểm có thể được đi qua nhiều lần, và độ dài đường đi là ngắn nhất có thể. Đảm bảo hai ngân hàng khác nhau bất kì đều có đường đi.
Yêu cầu: Hãy tìm ra cho CJ và Catalina độ dài đường đi ngắn nhất trên.
Input
- Dòng đầu tiên chứa ba số nguyên dương \(N,M,K\) thể hiện số địa điểm, số con đường hai chiều, số ngân hàng.
- Dòng tiếp theo chứa \(K\) số \(a_{1},a_{2},…,a_{K}\) là số hiệu của các địa điểm là ngân hàng.
- \(M\) dòng tiếp theo, dòng thứ \(i\) chứa ba số nguyên dương \(u_{i},v_{i}, L_{i}\) thể hiện có đường nối trực tiếp \(u_{i},v_{i}\) và độ dài là \(L_{i}\).
Output
- Ghi ra độ dài đường đi ngắn nhất.
Constraints
- \(1 \leq N \leq 10^{5}\), \(1 \leq M \leq 2.10^{5}\)
- \(1 \leq K \leq 18\)
Scoring
- Subtask \(1\) (\(30\%\) số điểm): \(N \leq 10^{3}\), \(M \leq 2.10^{3}\), \(K \leq 10\).
- Subtask \(2\) (\(30\%\) số điểm): \(N \leq 10^{5}\), \(M \leq 2.10^{5}\), \(K \leq 10\).
- Subtask \(3\) (\(40\%\) số điểm): Không có ràng buộc gì thêm.
Example
Test 1
Input
6 6 2
1 4
3 2 1
5 4 3
5 1 1
1 2 7
3 5 3
6 1 1
Output
4
SGAME5
Nộp bàiSPyofgame là một điệp viên của tổ chức O.W.C.A với bí danh H (H là gì thì chắc ai cũng nhận ra). Mỗi tháng, anh ta nhận được một danh sách nhiệm vụ của mình. Dù là thành viên lâu năm nhưng SPyofgame khá lười biếng, suốt ngày chỉ lo chơi surviv và nhắn tin cho bạn gái, anh ta không thể tính toán được xác suất để hoàn thành được \(N\) nhiệm vụ cụ thể được giao nên thường bị phạt tiền. Lần này, bạn hãy giúp anh ấy tính xác suất để anh ấy có thể hoàn thành được nhiệm vụ.
Input
Dòng đầu tiên là số nguyên dương \(N\), số lượng nhiệm vụ được giao \((1 \leq N \leq 20)\)
\(N\) dòng tiếp theo, mỗi dòng bao gồm \(N\) số nguyên dương \(x\) là xác xuất(%) để hoàn thành được nhiệm vụ con thứ \(i\) \((1 \leq i \leq N, 0 \leq x \leq 100)\)
Output
1 dòng duy nhất là xác suất để SPyofgame có thể hoàn thành \(N\) nhiệm vụ, đáp án được chấp nhận nếu sai số không quá \(10^{-6}\)
Example
Test 1
Input
3
10 6 4
4 2 10
25 12 7
Output
0.150000000000
Note
- Ở nhiệm vụ 1, SPyofgame có thể nhận nhiệm vụ con thứ 2 với xác suất thành công là \(6\)%
- Ở nhiệm vụ 2, SPyofgame có thể nhận nhiệm vụ con thứ 3 với xác suất thành công là \(10\)%
- Ở nhiệm vụ 3, SPyofgame có thể nhận nhiệm vụ con thứ 1 với xác suất thành công là \(25\)%
→ Tổng xác suất thành công của nhiệm vụ là 0.06 x 0.1 x 0.25 = 0.0015 = 0.15%
Không có cách nhận nhiệm vụ nào có xác suất thành công cao hơn 0.15%
Giới hạn:
- Subtask 1: 25% số test có N ≤ 5
- Subtask 2: 50% số test có N ≤ 10
- Subtask 3: 75% số test có N ≤ 15
- Subtask 4: không có giới hạn gì thêm
Đặt quân xe
Nộp bàiMột bàn cờ vua đặc biệt có \(n \times n\) ô vuông. Ô vuông ở hàng \(i\) cột \(j\) có giá trị nguyên dương là \(a[i][j]\).
Hãy tìm cách xếp \(n\) quân xe lên bàn cờ sao cho không có hai quân xe nào "ăn nhau" và tổng giá trị của các ô vuông có đặt quân xe là lớn nhất.
Input
- Số nguyên dương \(t\) --- số câu hỏi.
- Mỗi câu hỏi chứa số nguyên dương \(n\), và ma trận \(a\).
Output
- Tổng giá trị lớn nhất ở các ô vuông có đặt quân xe.
Giới hạn
- \(t \le 100\).
- \(n \le 16\).
- \(1 \leq a[i][j] \le 10^5\)
Example Input
2
2
1 5
2 1
3
1 2 3
6 5 4
8 1 2
Example Output
Case 1: 7
Case 2: 16
40% số điểm thỏa mãn \(n \le 10\).
Vẽ đường thẳng
Nộp bàiTrên hệ tọa độ \(Oxy\) có \(n\) điểm, hãy tìm cách vẽ lên số đường thẳng ít nhất, sao cho mỗi điểm trong \(n\) điểm này đều thuộc ít nhất một đường thẳng.
Input
- Số nguyên dương \(q\) --- số câu hỏi.
- Mỗi câu hỏi chứa số nguyên dương \(n\), và tọa độ \(x_i\), \(y_i\) của \(n\) điểm.
Output
- Số đường thẳng.
Giới hạn
- \(q \le 500\).
- \(n \le 16\).
- \(-10^5 \le x_i, y_i \le 10^5\).
Example Input
2
3
0 0
1 1
2 2
3
0 0
1 1
2 3
Example Output
Case 1: 1
Case 2: 2
Tham khảo: LightOJ
Hoán vị cơ số
Nộp bàiCho một số \(n\) được biểu diễn theo cơ số \(b\). Các chữ số của số này đều khác nhau đôi một.
Hãy đếm số hoán vị của số này theo cơ số \(b\) sao cho hoán vị này có giá trị theo cơ số \(10\) chia hết cho \(k\).
Input
- Số nguyên dương \(q\) --- số câu hỏi.
- Mỗi câu hỏi chứa hai số nguyên dương \(b\), \(k\) và số \(n\) được biểu diễn theo cơ số \(b\).
Output
- Số hoán vị thỏa mãn đề bài.
Giới hạn
- \(q \le 100\).
- \(2 \le b \le 16\).
- \(1 \le k \le 20\).
Example Input
3
2 2
10
10 2
5681
16 1
ABCDEF0123456789
Example Output
Case 1: 1
Case 2: 12
Case 3: 20922789888000
Tham khảo: LightOJ
Chăn Chối
Nộp bàiTrong tựa game Yasuo, có \(n\) con boss, mỗi con boss có lượng máu riêng của chúng. Con boss thứ \(i\) có lượng máu là \(h_i\).
Ban đầu, khi chưa tiêu diệt được con boss nào, nhân vật chính sẽ có thanh katana "Trăn Trối". Với mỗi nhát chém, thanh gươm gây \(1\) sát thương cho mỗi con boss bất kỳ.
Sau khi tiêu diệt được con boss thứ \(i\) bạn sẽ nhận "THÊM" một thanh katana mới, thanh gươm này sẽ gây \(a[i][j]\) sát thương một nhát chém đối với con boss thứ \(j\).
Lưu ý: các thanh gươm trước đó không bị mất đi, vẫn có thể được sử dụng tiếp.
Hãy tìm số nhát chém tối thiểu để "phá đảo" trò chơi.
Input
- Số nguyên dương \(q\) --- số câu hỏi.
- Mỗi câu hỏi chứa số nguyên dương \(n\), máu của \(n\) boss \(h_1, h_2, ..., h_n\) và ma trận \(a\).
Output
- Số nhát chém tối thiểu.
Giới hạn
- \(q \le 40\).
- \(n \leq 15\).
- \(1 \le h_i \le 10^6\).
- \(0 \le a[i][j] \le 9\).
Example Input
2
3
10 10 10
010
100
111
3
3 5 7
030
500
007
Example Output
Case 1: 30
Case 2: 12
Tham khảo: LightOJ
Swap
Nộp bàiCho dãy số nguyên dương \(a\) gồm \(n\) phần tử. Nhiệm vụ của bạn là hãy hoán đổi các phần tử liền kề sao cho các số có cùng giá trị đứng cạnh nhau thành một đoạn liên tiếp.
Input
- Số nguyên dương \(t\) --- số câu hỏi.
- Mỗi câu hỏi, chứa hai số nguyên dương \(n\), \(m\) và dãy \(a\). Các phần tử trong dãy \(a\) có giá trị không quá \(m\).
Output
- Số lần hoán đổi tối thiểu để hoàn thành.
Giới hạn
- \(t \le 15\)
- \(n \le 10^5\)
- \(m \le 16\)
Example Input
3
4 2
1 2 1 2
6 4
2 1 4 3 1 2
8 6
1 3 2 5 5 4 5 2
Example Output
Case 1: 1
Case 2: 6
Case 3: 5
Tham khảo: LightOJ
CSES - Hamiltonian Flights | Chuyến bay Hamilton
Nộp bàiCó \(n\) thành phố và \(m\) chuyến bay kết nối giữa chúng. Bạn muốn đi từ Syrjälä đến Lehmälä để bạn đến thăm mỗi thành phố đúng một lần. Có bao nhiêu tuyến đường khả thi?
Input
- Dòng đầu tiên là hai số nguyên \(n\) và \(m\): số thành phố và chuyến bay. Các thành phố được đánh số \(1,2,\ldots, n\). Thành phố \(1\) là Syrjälä, và thành phố \(n\) là Lehmälä.
- Sau đó, có \(m\) dòng mô tả các chuyến bay. Mỗi dòng gồm hai số nguyên \(a\) và \(b\): có một chuyến bay từ thành phố \(a\) đến thành phố \(b\). Tất cả các chuyến bay đều là chuyến bay một chiều.
Output
- In ra một số nguyên: số tuyến đường theo modulo \(10^9 + 7\).
Constraints
- \(2 \le n \le 20\)
- \(1 \le m \le n^2\)
- \(1 \le a, b \le n\)
Example
Test 1
Input
4 6
1 2
1 3
2 3
3 2
2 4
3 4
Output
2
CSES - Elevator Rides | Đi thang máy
Nộp bàiCó \(n\) người muốn lên đến đỉnh của một tòa nhà mà chỉ có một thang máy. Bạn biết trọng lượng của mỗi người và trọng lượng tối đa cho phép trong thang máy. Số lần đi thang máy tối thiểu là bao nhiêu?
Input
- Dòng đầu tiên có hai số nguyên \(n\) và \(x\): số lượng người và trọng lượng tối đa cho phép trong thang máy.
- Dòng thứ hai chứa \(n\) số nguyên \(w_1,w_2,\ldots,w_n\): trọng lượng của mỗi người.
Output
- In một số nguyên: số lần đi tối thiểu.
Constraints
- \(1 \leq n \leq 20\)
- \(1 \leq x \leq 10 ^ 9\)
- \(1 \leq w_i \leq x\)
Example
Sample input
4 10
4 8 6 1
Sample output
2




