ধরুন আমাদের কাছে সমস্ত ধনাত্মক সংখ্যা সহ একটি পূর্ণসংখ্যা অ্যারে আছে এবং সমস্ত উপাদান অনন্য, সম্ভাব্য সংমিশ্রণের সংখ্যা খুঁজুন, যাতে আমরা যোগ করলে, আমরা ধনাত্মক পূর্ণসংখ্যা লক্ষ্য পাব। পি>
সুতরাং যদি অ্যারে হয় [1, 2, 3] এবং লক্ষ্য 4 হয়, তাহলে সম্ভাব্য সমন্বয় হবে [[1,1,1,1], [1,1,2], [1,2,1] , [2,1,1], [1,3], [3,1], [2, 2]], তাই আউটপুট 7 হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ধরুন আমাদের একটি পুনরাবৃত্ত ফাংশন আছে যার নাম solve(), এটি অ্যারে, টার্গেট এবং গতিশীল প্রোগ্রামিং কাজের জন্য আরেকটি অ্যারে নিচ্ছে। প্রক্রিয়াটি এরকম হবে
- যদি লক্ষ্য =0, তারপর 1 ফেরত দিন
- যদি dp[target] -1 না হয়, তাহলে dp[target] ফেরত দিন
- উত্তর :=0
- আমি 0 থেকে সংখ্যার মধ্যে
- যদি টার্গেট>=সংখ্যা[i]
- উত্তর :=উত্তর + সমাধান(সংখ্যা, লক্ষ্য – সংখ্যা[i], ডিপি)
- যদি টার্গেট>=সংখ্যা[i]
- dp[target] সেট করুন :=ans
- উত্তর ফেরত দিন
উদাহরণ(C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector <int> dp(target + 1, -1);
return helper(nums, target, dp);
}
int helper(vector <int>& nums, int target, vector <int>& dp){
if(target == 0)return 1;
if(dp[target] != -1)return dp[target];
int ans = 0;
for(int i = 0; i < nums.size(); i++){
if(target >= nums[i]){
ans += helper(nums, target - nums[i], dp);
}
}
return dp[target] = ans;
}
};
main(){
Solution ob;
vector<int> v = {1,2,3};
cout << ob.combinationSum4(v, 4);
} ইনপুট
[1,2,3] 4
আউটপুট
7