ধরুন আমরা তাসের খেলা খেলছি। আমাদেরকে তাদের প্রতিটিতে একটি নম্বর সহ রৈখিকভাবে সাজানো বেশ কয়েকটি কার্ড দেওয়া হয়েছে। কার্ডের সংখ্যা এলোমেলোভাবে বিতরণ করা হয়; এবং কার্ডের শুরুতে এবং শেষে, দুটি কার্ড ঢোকানো হয় তাদের উপর 1 নম্বর দিয়ে। এখন, গেমটিতে, আমাদের প্রদত্ত কার্ডগুলি তুলে সর্বোচ্চ পয়েন্ট সংগ্রহ করতে হবে। কার্ডগুলিকে একটি অ্যারে 'কার্ড'-এ উপস্থাপন করা হয় যেখানে অ্যারের উপাদানগুলি কার্ডের সংখ্যা উপস্থাপন করে[i]। যখন আমরা কার্ড i বাছাই করি, আমরা পয়েন্ট কার্ড সংগ্রহ করি [i - 1] * কার্ড[i] * কার্ড [i + 1]। আমরা যখন একটি কার্ড বাছাই করি, কার্ড [i - 1] এবং কার্ড [i] প্রতিবেশী হয়ে ওঠে। সুতরাং, এই প্রদত্ত কার্ডগুলি থেকে আমরা সর্বাধিক পয়েন্টগুলি খুঁজে বের করতে পারি যা আমরা সংগ্রহ করতে পারি।
সুতরাং, যদি ইনপুটটি কার্ডের মত হয় =[7, 5, 9, 10], তাহলে আউটপুট হবে 1025
তাই খেলায়, আমরা −
নিতে পারিসূচক 1 এ কার্ডটি 7 * 5 * 9 =315 পয়েন্ট পান।
কার্ডটি নতুন সূচক 1 এ এবং 7 * 9 * 10 =630 পয়েন্ট পান।
সূচক 1 এ কার্ডটি 7 * 10 =70 পয়েন্ট পান।
শেষ কার্ড এবং 10 পয়েন্ট পান।
মোট পয়েন্ট =315 + 630 + 70 + 10 =1025
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন অনুসন্ধান () সংজ্ঞায়িত করুন। এটি x, y
- লাগবে
- তাপ :=0 x + 1 থেকে y রেঞ্জে z-এর জন্য
- করুন
- temp :=সর্বাধিক (temp, search(x, z) + search(z, y) + কার্ড[x] * কার্ড[z] * কার্ড[y])
- রিটার্ন টেম্প
- লিস্ট কার্ডের শুরুতে এবং শেষে যথাক্রমে 1 এবং 1 মান সন্নিবেশ করান
- রিটার্ন সার্চ (0, কার্ডের আকার - 1)
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(cards): def search(x, y): temp = 0 for z in range(x + 1, y): temp = max(temp, search(x, z) + search(z, y) + cards[x] * cards[z] * cards[y]) return temp cards = [1] + cards + [1] return search(0, len(cards) - 1) print(solve([7, 5, 9, 10]))
ইনপুট
[7, 5, 9, 10]
আউটপুট
1025