কম্পিউটার

সর্বাধিক যোগফল যাতে C++ প্রোগ্রামে কোন দুটি উপাদান সংলগ্ন বিকল্প পদ্ধতি নয়


এই সমস্যায়, আমাদেরকে ইতিবাচক মান সমন্বিত n আকারের একটি অ্যারে অ্যারে দেওয়া হয়েছে। আমাদের কাজ হল একটি প্রোগ্রাম তৈরি করা যাতে সর্বোচ্চ সাবক্যুয়েন্সাম খুঁজে পাওয়া যায় যাতে অ্যারের কোনো দুটি পরপর উপাদান না থাকে।

সমস্যা বর্ণনা − আমাদের সাবয়ারের যোগফল খুঁজে বের করতে হবে যেটিতে অ্যারের উপাদান রয়েছে কিন্তু অ্যারের দুটি সন্নিহিত উপাদান বিবেচনায় নেওয়া যাবে না।

উদাহরণ

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

arr[] ={5, 2, 1, 9, 6}

আউটপুট

ব্যাখ্যা

সাবরের যোগফল হল :{5, 1, 6}, যোগফল =5 + 1 + 6 =12{2, 9}, যোগফল =2 + 9 =11

সমাধান পদ্ধতি

এখানে, আমাদের কাছে সমস্যাটির একটি বিকল্প সমাধান থাকবে যা অ্যাডাইনামিক প্রোগ্রামিং পদ্ধতি ব্যবহার করছে। এই পদ্ধতিতে, আমরা প্রদত্ত শর্তকে সন্তুষ্ট করে পরবর্তী অনুক্রমগুলি খুঁজে পাব এবং এটির সর্বোচ্চটি মুদ্রণ করব। আমরা একটি অ্যারে তৈরি করব maxSumDP[n] যা তৈরি করা পরবর্তী অনুক্রমের সর্বাধিক সাব সংরক্ষণ করে। maxSumDP[i] উপাদানটি সূচী i থেকে n-1 এ উপাদানগুলি নিয়ে তৈরি করা সর্বাধিক যোগফল সঞ্চয় করে৷ এর জন্য আমরা হয় অ্যারের বর্তমান উপাদানটি বিবেচনা করতে পারি অ্যারে [i] অর্থাৎ maxSumDP[i] =arr[i] + maxSumDP[i+2]। অথবা অ্যারের বর্তমান উপাদান বিবেচনা করবেন না arr[i] অর্থাৎ maxSumDP[i] =maxSumDP[i+2]৷

অ্যালগরিদম

শুরু করুন

maxSumDP[]

ধাপ 2

maxSumDP[n−1] এবং maxSumDP[n−2].maxSumDP[n−1] =arr[n−1] এবং maxSumDP[n−2] =max(arr[n−1] এর মানগুলি শুরু করুন , arr[n−2])।

ধাপ 2

 i −> n−2 থেকে 0
এর জন্য লুপ

পদক্ষেপ 1.2৷ −

maxSumDP[i],maxSumDP[i] =সর্বোচ্চ এর মান শুরু করুন (arr[i] + maxSumDP[i + 2],maxSumDP[i + 1])

ধাপ 3

প্রত্যাবর্তন করুন maxSumDP[0] যা সর্বাধিক যোগফল ক্রম যোগফল।

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

#include  namespace ব্যবহার করে std;int retMaxVal(int a, int b){ if(a> b) রিটার্ন a; রিটার্ন b;}int calcMaxSum(int arr[], int n){int maxSumDP[n]; maxSumDP[n−1] =arr[n−1]; maxSumDP[n−2] =max(arr[n−1], arr[n−2]); জন্য (int i =n − 2; i>=0; i−−) { maxSumDP[i] =retMaxVal(arr[i] + maxSumDP[i + 2], maxSumDP[i + 1]); } রিটার্ন maxSumDP[0];}int main() {int arr[] ={5, 2, 1, 9, 6}; int n =sizeof(arr) / sizeof(int); cout<<"সর্বোচ্চ পরবর্তী সমষ্টি এমনভাবে যাতে অ্যারের কোনো পরপর দুটি উপাদান থাকে না "< 

আউটপুট

সর্বোচ্চ পরবর্তী যোগফল এমনভাবে যাতে অ্যারের কোনো দুটি পরপর উপাদান 14 না হয়

  1. বাইনারি ট্রিতে নোডের সর্বাধিক যোগফল যেমন C++ প্রোগ্রামে ডায়নামিক প্রোগ্রামিং ব্যবহার করে দুটি সংলগ্ন নয়

  2. বৃত্তাকার অ্যারেতে সর্বাধিক যোগফল যাতে C++ এ দুটি উপাদান সংলগ্ন থাকে না

  3. একটি 2 x n গ্রিডে সর্বাধিক যোগফল যাতে C++ এ দুটি উপাদান সংলগ্ন থাকে না

  4. সর্বাধিক পরবর্তী সমষ্টি যাতে কোনো তিনটি পরপর হয় না