মান লাগিয়ে, 3*n সংখ্যক কয়েনের পাইল আছে, যেগুলোর আকার ভিন্ন। তিনজন খেলাড় একটি খেলা খেলছে:
- প্রতিটি ধাপে, খেলাড় ১ যেকোনো ৩টি কয়েনের পাইল সিলেক্ট করবে।
- তার পছন্দে, খেলাড় ২ সর্বোচ্চ কয়েন ওয়ালা পাইল নেবে।
- খেলাড় ১ পরের সর্বোচ্চ কয়েন ওয়ালা পাইল নেবে।
- খেলাড় ৩ শেষ পাইলটি নেবে।
- কয়েনের পাইল না থাকা পর্যন্ত এই ধাপগুলো পুনরাবৃত্তি করুন।
এখন যদি piles নামে একটি ইন্টিজার অ্যারে থাকে যেখানে piles[i] হল i-তম পাইলের কয়েনের সংখ্যা, তবে আমাদের খেলাড় ১ কতটা সর্বোচ্চ কয়েন পেতে পারে তা বের করতে হবে।
যেমন, ইনপুট piles = [2,4,1,2,7,8] হলে, আউটপুট হবে 9 কারণ প্রথমে আমরা (2,7,8) ট্রিপলেট সিলেক্ট করতে পারি, তারপর খেলাড় ২ ৮ নেবে, খেলাড় ১ ৭ নেবে এবং ২ খেলাড় ৩-র জন্য। আবার (1,2,4) ট্রিপলেট সিলেক্ট করলে, খেলাড় ২ ৪ নেবে, খেলাড় ১ ২ নেবে এবং বাকি ১ খেলাড় ৩-র জন্য। বর্তমানে খেলাড় ১-র पास ৭+২ = ৯ কয়েন, যা সর্বোচ্চ।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব:
- piles লিস্টটি সর্ট করুন
- ans := 0
- piles-এর আকার ০ না হওয়া পর্যন্ত:
- ans := ans + piles[-2] (দ্বিতীয় শেষ এলিমেন্ট)
- piles[-2] ডিলিট করুন
- piles[-1] ডিলিট করুন
- piles[0] ডিলিট করুন
- ans রিটার্ন করুন
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন:
উদাহরণ
def solve(piles):
piles.sort()
ans = 0
while(len(piles)!=0):
ans = ans + piles[-2]
del piles[-2]
del piles[-1]
del piles[0]
return ans
piles = [2,4,1,2,7,8]
print(solve(piles))
ইনপুট
[2,4,1,2,7,8]
আউটপুট
9