মান লিজিয়ে আমাদের একটি অ্যারে nums এবং আরেকটি ভ্যালু sum আছে। আমাদের যাচাই করতে হবে nums-এ উপস্থিত এলিমেন্টগুলো যোগ করে sum পাওয়া সম্ভব কিনা, আমরা একক এলিমেন্টকে একাধিকবার বেছে নিতে পারি।
যেমন, ইনপুট যদি nums = [2, 3, 5], sum = 28 হয়, তবে আউটপুট হবে True কারণ ৫ + ৫ + ৫ + ৫ + ৩ + ৩ + ২ = ২৮ পাওয়া যায়।
সমাধানের ধাপসমূহ
MAX := 1000table :=সাইজMAXএকটি অ্যারে ০ দিয়ে ভরুনutil()ফাংশন সংজ্ঞায়িত করুন। এটিnumsনেবেtable[0] := 1numsলিস্টটি সর্ট করুনi০ থেকেnums-এর সাইজ - ১ পর্যন্ত, করুন:val := nums[i]- যদি
table[val]নন-জিরো হয়, তবে:- নেক্সট ইটারেশনে যান
j০ থেকেMAX - val - 1পর্যন্ত, করুন:- যদি
table[j]নন-জিরো হয়, তবে:table[j + val] := 1
- যদি
- মূল মেথড থেকে নিচের কাজ করুন:
util(nums)- যদি
table[sum]নন-জিরো হয়, তবে:Trueরিটার্ন করুন
Falseরিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:
MAX = 1000
table = [0] * MAX
def util(nums):
table[0] = 1
nums.sort()
for i in range(len(nums)):
val = nums[i]
if table[val]:
continue
for j in range(MAX - val):
if table[j]:
table[j + val] = 1
def solve(nums, sum):
util(nums)
if table[sum]:
return True
return False
nums = [2, 3, 5]
sum = 28
print(solve(nums, sum))
ইনপুট
[2, 3, 5], 28
আউটপুট
True