ধরুন আমাদের কাছে ধনাত্মক সংখ্যার একটি তালিকা আছে যাকে বলা হয় সংখ্যা। এখন একটি ক্রিয়াকলাপ বিবেচনা করুন যেখানে আমরা a এবং b যেকোন দুটি মান সরিয়ে ফেলি যেখানে a ≤ b এবং যদি a
সুতরাং, যদি ইনপুটটি nums =[2, 4, 5] এর মত হয়, তাহলে আউটপুট হবে 1, কারণ, আমরা 4 এবং 5 নির্বাচন করতে পারি তারপর [2, 1] পেতে 1 ব্যাক ইনসার্ট করতে পারি। এখন [1] পেতে 2 এবং 1 বেছে নিন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- s :=সংখ্যায় উপস্থিত সমস্ত উপাদানের যোগফল
- একটি ফাংশন সংজ্ঞায়িত করুন f()। এর জন্য i, s লাগবে
- যদি i>=সংখ্যার আকার , তারপর
- রিটার্ন এস
- n :=সংখ্যা[i]
- যদি s - 2 * n <0, তারপর
- f(i + 1, s) ফেরত দিন
- নূন্যতম f(i + 1, s - 2 * n) এবং f(i + 1, s) ফেরত দিন
- প্রধান পদ্ধতি থেকে f(0, s) রিটার্ন করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(nums): s = sum(nums) def f(i, s): if i >= len(nums): return s n = nums[i] if s - 2 * n < 0: return f(i + 1, s) return min(f(i + 1, s - 2 * n), f(i + 1, s)) return f(0, s) nums = [2, 4, 5] print(solve(nums))
ইনপুট
[2, 4, 5]
আউটপুট
1