ধরুন আমাদের একটি অ্যারের সংখ্যা আছে, সেখানে সর্বাধিক 50টি অনন্য মান রয়েছে। আমাদের কাছে কোয়ান্টিটি নামে আরেকটি অ্যারে আছে, যেখানে quantity[i] গ্রাহকের অর্ডারকৃত মানের পরিমাণকে নির্দেশ করে। আমাদের পরীক্ষা করতে হবে যে এইরকম সংখ্যা বিতরণ করা সম্ভব কিনা
-
ith গ্রাহক সঠিক পরিমাণে [i] আইটেম পায়,
-
ith গ্রাহক যে মান পায় তা সবই সমান, এবং
-
সমস্ত গ্রাহকরা সন্তুষ্ট৷
৷
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[5,1,2,2,3,4,4,3,3] পরিমাণ =[2,2,3], তাহলে আউটপুটটি সত্য হবে কারণ দুই গ্রাহক দুটি উপাদান চায়। প্রতিটি, যাতে তারা [2,2] এবং [4,4] পেতে পারে, এবং তৃতীয়টি তিনটি আইটেম চায়, তারা [3,3,3] পেতে পারে, তাই সবাই সন্তুষ্ট৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন util() সংজ্ঞায়িত করুন। এটি i, cntr
লাগবে -
যদি আমি পরিমাণের আকারের সমান হয়, তাহলে
-
রিটার্ন ট্রু
-
-
temp_counter :=cntr এর একটি অনুলিপি তৈরি করুন
-
cntr-এ প্রতিটি cnt-এর জন্য, করুন
-
যদি cnt>=পরিমাণ[i], তাহলে
-
temp_counter[cnt] :=temp_counter[cnt] - 1
-
যদি temp_counter[cnt] 0 এর মত হয়, তাহলে
-
temp_counter
থেকে cnt-th উপাদান মুছুন
-
-
rem :=cnt - পরিমাণ[i]
-
temp_counter[rem] :=temp_counter[rem] + 1
-
যদি util(i+1, temp_counter) সত্য হয়, তাহলে
-
রিটার্ন ট্রু
-
-
temp_counter[rem] :=temp_counter[rem] - 1
-
যদি temp_counter[rem] 0 এর মত হয়, তাহলে
-
temp_counter
থেকে rem-th উপাদান মুছুন
-
-
-
temp_counter[cnt] :=temp_counter[cnt] + 1
-
-
রিটার্ন ফলস
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন
-
cnt :=সংখ্যায় উপস্থিত সংখ্যার সমস্ত ফ্রিকোয়েন্সির ম্যাপ হোল্ডিং ফ্রিকোয়েন্সি
-
বিপরীত ক্রমে বাছাই পরিমাণ
-
util(0, cnt)
ফেরত দিন
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
from collections import Counter def solve(nums, quantity): def util(i, cntr): if i == len(quantity): return True temp_counter = cntr.copy() for cnt in cntr: if cnt >= quantity[i]: temp_counter[cnt] -= 1 if temp_counter[cnt] == 0: temp_counter.pop(cnt) rem = cnt - quantity[i] temp_counter[rem] += 1 if util(i+1, temp_counter): return True temp_counter[rem] -= 1 if temp_counter[rem] == 0: temp_counter.pop(rem) temp_counter[cnt] += 1 return False cnt = Counter(Counter(nums).values()) quantity.sort(reverse=True) return util(0, cnt) nums = [5,1,2,2,3,4,4,3,3] quantity = [2,2,3] print(solve(nums, quantity))
ইনপুট
[0,1,2,3,4], [[3,1],[1,3],[5,6]]
আউটপুট
True