ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা রয়েছে এবং একটি ধনাত্মক মান Kও রয়েছে। আমরা এই তিনটি ক্রিয়াকলাপের যে কোনো একটি সংখ্যায় করতে পারি -
- একটি সংখ্যা ঋণাত্মক করুন,
- সংখ্যার সূচী যোগ করুন (সূচী 1 থেকে শুরু করুন) সংখ্যাটিতে নিজেই
- সংখ্যা থেকেই সংখ্যার সূচী বিয়োগ করুন।
পরিশেষে, প্রতিটি উপাদানে শুধুমাত্র একবার এই ক্রিয়াকলাপগুলি সম্পাদন করার মাধ্যমে অ্যারের যোগফল k হয়ে যাওয়ায় প্রদত্ত অ্যারেটি রূপান্তরিত হতে পারে কিনা তা আমাদের পরীক্ষা করতে হবে৷
সুতরাং, যদি ইনপুটটি nums =[1,2,3,7] k =8 এর মত হয়, তাহলে আউটপুটটি True হবে কারণ আমরা [1, 0, এর মতো অ্যারে তৈরি করতে 2 এবং 3 থেকে 2 এবং 3 এর সূচক বিয়োগ করতে পারি। 0, 7], তাই এখন যোগফল 8 =k।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- আকার :=100
- একটি ফাংশন is_ok() সংজ্ঞায়িত করুন। এটি i, total, k, nums, table নেবে
- n :=সংখ্যার আকার
- যদি মোট <=0 হয়, তাহলে
- মিথ্যে ফেরত দিন
- যদি i>=n, তাহলে
- যদি মোট k এর সমান হয়, তাহলে
- সত্য ফেরান
- যদি মোট k এর সমান হয়, তাহলে
- মিথ্যে ফেরত দিন
- যদি টেবিল[i, মোট] -1 না হয়, তাহলে
- রিটার্ন টেবিল[i, মোট]
- টেবিল[i, মোট] :=1 যখন (is_ok(i+1, মোট - 2 * nums[i], k, nums, table) অ-শূন্য বা is_ok(i+1, মোট, k, সংখ্যা, টেবিল) অ-শূন্য), অন্যথায় 0
- টেবিল[i, মোট] :=1 যখন (is_ok(i+1, total -(i+1) , k, nums, table) অথবা table[i, total]), অন্যথায় 0
- টেবিল[i, মোট] :=1 যখন (is_ok(i+1, total + i + 1, k, nums, table) অথবা table[i, total]), অন্যথায় 0
- রিটার্ন টেবিল[i, মোট]
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
- মোট :=সংখ্যায় সমস্ত উপাদানের যোগফল
- টেবিল :=আকারের সমান দৈর্ঘ্যের একটি অ্যারে এবং -1 দিয়ে পূরণ করুন
- আমি 0 থেকে আকারের রেঞ্জের জন্য,
- করুন
- টেবিল[i] :=আকারের সমান দৈর্ঘ্যের একটি অ্যারে এবং -1 দিয়ে পূরণ করুন
- রিটার্ন is_ok(0, total, k, nums, table)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
size = 100 def is_ok(i, total, k, nums, table): n = len(nums) if total <= 0: return False if i >= n: if total == k: return True return False if table[i][total] != -1: return table[i][total] table[i][total] = is_ok(i+1, total - 2 * nums[i], k, nums, table) or is_ok(i+1, total, k, nums, table) table[i][total] = is_ok(i+1, total - (i+1), k, nums, table) or table[i][total] table[i][total] = is_ok(i+1, total + i + 1, k, nums, table) or table[i][total] return table[i][total] def solve(nums, k): total = sum(nums) table = [-1]*size for i in range(size): table[i] = [-1]*size return is_ok(0, total, k, nums, table) nums = [1,2,3,7] k = 8 print(solve(nums, k))
ইনপুট
[1,2,3,7], 8
আউটপুট
True