Một luống hoa có n cây. Mỗi cây được đánh giá với một mức độ đẹp được mô tả bằng một số nguyên dương. Cây thứ i (i=1...n) mức độ đẹp là B[i] Để có luống hoa đẹp, người ta có thể tỉa bớt một số cây trong luống sao cho tổng mức độ đẹp của các cây còn lại trong luống là một số nguyên tố.
Yêu cầu: Hãy đếm xem có bao nhiêu cách tỉa để luống hoa trở thành một luống hoa đẹp.
Dữ liệu vào: Tệp văn bản TIAHOANT.INP gồm
+ Dòng đầu ghi số nguyên dương n (n <= 20) .
+ Dòng thứ hai ghi n số nguyên dương B[1], B[2],...,B[n] Mỗi số có giá trị không vượt quá 1000. Giữa các số cách nhau một dấu cách.
cứu e với huhu
Quảng cáo
2 câu trả lời 160
import math
def is_prime(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def count_ways(n, B):
MAX = sum(B)
dp = [0] * (MAX + 1)
dp[0] = 1
for i in range(n):
for j in range(MAX, B[i] - 1, -1):
dp[j] += dp[j - B[i]]
count = 0
for i in range(2, MAX + 1):
if is_prime(i):
count += dp[i]
return count
n = int(input())
B = list(map(int, input().split()))
print(count_ways(n, B))
ok ![]()
Để giải bài toán này, ta cần sắp xếp các cây theo mức độ đẹp từ cao đến thấp. Sau đó, ta sẽ bắt đầu tỉa bớt các cây từ phía sau (cây có mức độ đẹp thấp nhất) cho đến khi tổng mức độ đẹp của các cây còn lại đạt giá trị lớn nhất.
Dưới đây là mã giả để giải bài toán này:
1. Sắp xếp mảng B[] theo thứ tự giảm dần.
2. Khởi tạo biến sum = 0.
3. Duyệt từ i = n đến 1:
- Nếu sum + B[i] > sum thì cập nhật sum = sum + B[i].
- Ngược lại, thoát khỏi vòng lặp.
4. Kết quả cần tìm là sum.
Đây là cách giải bài toán "Tỉa hoa nguyên tố" để có tổng mức độ đẹp lớn nhất sau khi tỉa bớt một số cây trong luống hoa.
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
45411 -
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
34840 -
Đã trả lời bởi chuyên gia
30638 -
Hỏi từ APP VIETJACK28217
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
22413
