Điểm:
400 (p)
Thời gian:
1.0s
Bộ nhớ:
1G
Input:
bàn phím
Output:
màn hình
Cho một cân hai đĩa và \(n\) quả cân có khối lượng đôi một khác nhau \(w_1, w_2, . . , w_n\). Tiến hành đặt lần
lượt từng quả cân lên một trong hai đĩa của cân và đảm bảo rằng tổng khối lượng bên trái luôn nhỏ
hơn hoặc bằng tổng khối lượng bên phải.
Yêu cầu: Cho \(n\) quả cân có khối lượng \(w_1, w_2, . . , w_n\), hãy đếm số cách xếp \(n\) quả cân thỏa mãn.
Hai cách được gọi là khác nhau nếu thứ tự xếp các quả cân khác nhau hoặc tồn tại một quả cân nằm
ở đĩa khác nhau.
Input
Vào từ thiết bị vào chuẩn có khuôn dạng:
- Dòng 1: chứa số nguyên \(n\);
- Dòng 2: chứa \(n\) số nguyên dương \(w_1, w_2, . . , w_n\).
Output
- Ghi ra thiết bị ra chuẩn một dòng chứa một số nguyên là số cách xếp \(n\) quả cân lên đĩa.
Scoring
- Subtask \(1\) (\(40\%\) số điểm): \(n \le 7\) và \(w_i \le 1000 (1 \le i \le n)\);
- Subtask \(2\) (\(40\%\) số điểm): \(n \le 14\) và \(w_i \le 1000 (1 \le i \le n)\);
- Subtask \(3\) (\(20\%\) số điểm): \(n \le 28\) và \(w_i = 2^{i−1} (1 \le i \le n)\).
Example
Test 1
Input
2
1 2
Output
3
Note
Ở ví dụ bên trái, có 8 cách sắp xếp các quả cân lên hai bàn cân như sau:
- Đặt quả cân 1 bên trái rồi đặt quả cân 2 bên trái;
- Đặt quả cân 1 bên trái rồi đặt quả cân 2 bên phải;
- Đặt quả cân 1 bên phải rồi đặt quả cân 2 bên trái;
- Đặt quả cân 1 bên phải rồi đặt quả cân 2 bên phải;
- Đặt quả cân 2 bên trái rồi đặt quả cân 1 bên trái;
- Đặt quả cân 2 bên trái rồi đặt quả cân 1 bên phải;
- Đặt quả cân 2 bên phải rồi đặt quả cân 1 bên trái;
- Đặt quả cân 2 bên phải rồi đặt quả cân 1 bên phải.
Tuy nhiên chỉ có 3 cách (cách 4, 7, 😎 là đảm bảo trong toàn bộ quá trình sắp xếp các quả cân,
đĩa bên trái luôn nhỏ hơn hoặc bằng đĩa cân bên phải.
Test 2
Input
3
10 11 12
Output
15
Bình luận
Em xin chia sẻ lời giải bài toán này như sau:
Bài chỉ mang tính chất tham khảo, vui lòng không chép code :<
Với 1 trạng thái dãy tam phân, ta tính số cách để tiếp tục đặt đến hết thỏa mãn:
+ Nếu mà cân nặng bên trái khi thêm quả cân thứ i vào mà vẫn nhỏ hơn hoặc bằng cân nặng bên phải thì ta có thể đặt quả cân thứ i sang bên trái
+Quả cân thứ i sẽ đặt sang bên phải
Code của phần trên như sauu:
Code để có được 80 điểm:
Sau khi thử vài test như sau
Như vậy quy luật sub 3 là f[n]=f[n-1]*(2n+1), với f[0]=1
Nhưng vì số rất lớn ( Có thể lên tới 40 chữ số ) nên để AC thì ta phải sử dụng Bignum
Code để AC:
Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.
Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.