রড দৈর্ঘ্যের তালিকা (rodLen), প্রতি একক দৈর্ঘ্যের লাভ (profit) এবং প্রতি কাটের খরচ (cost) দেওয়া আছে। শুধু একই দৈর্ঘ্যের রড বিক্রি করা যায়। রড কাটতে পারেন (পূর্ণসংখ্যা দৈর্ঘ্যে) কিন্তু প্রতি কাটের জন্য cost টাকা দিতে হবে। সর্বোচ্চ লাভ বের করতে হবে।
সমস্যা উদাহরণ
ইনপুট: rodLen = [7, 10], profit = 6, cost = 4
আউটপুট: 82
ব্যাখ্যা: ৭ কেটে ৫+২, ১০ কেটে ৫+৫। তিনটি ৫ দৈর্ঘ্যের রড বিক্রি: (৫+৫+৫)×৬ - ২×৪ = ৯০ - ৮ = ৮২।
সমাধানের পদ্ধতি (ব্রুট ফোর্স সব সম্ভাব্য কাটের দৈর্ঘ্য ট্রাই করুন)
l_max = max(rodLen)- প্রতিটি সম্ভাব্য কাটের দৈর্ঘ্য
cuts(১ থেকে l_max) এর জন্য:- প্রতিটি রডের জন্য:
- যদি
rod_len < cuts: স্কিপ করুন c_count = rod_len // cuts(কত টুকরো পাওয়া যাবে)total_len = c_count * cuts- যদি
rod_len == total_len:c_count -= 1(শেষ কাট দরকার নেই) curr_profit = total_len * profit - cost * c_count- যদি
curr_profit < 0: স্কিপ করুন p_cut += curr_profit
- যদি
p_max = max(p_max, p_cut)
- প্রতিটি রডের জন্য:
p_maxরিটার্ন করুন
পাইথন কোড
def solve(rodLen, profit, cost):
n = len(rodLen)
if n == 0:
return 0
l_max = max(rodLen)
p_max = 0
for cuts in range(1, l_max + 1):
p_cut = 0
for rod_len in rodLen:
if rod_len < cuts:
continue
c_count = rod_len // cuts
total_len = c_count * cuts
if rod_len == total_len:
c_count -= 1
curr_profit = total_len * profit - cost * c_count
if curr_profit < 0:
continue
p_cut += curr_profit
p_max = max(p_max, p_cut)
return p_max
rodLen = [7, 10]
profit = 6
cost = 4
print(solve(rodLen, profit, cost)) # আউটপুট: 82
টেস্ট কেস
ইনপুট: [7, 10], 6, 4
আউটপুট: 82