কম্পিউটার

C++ এ m এর থেকে কম বা সমান দৈর্ঘ্যের সর্বাধিক সমষ্টি বিন্যাস খুঁজুন


সমস্যায়, আমাদের বিভিন্ন দৈর্ঘ্যের n অ্যারে দেওয়া হয়েছে। আমাদের কাজ হল m এর থেকে কম বা সমান দৈর্ঘ্যের সর্বাধিক সমষ্টি অ্যারে খুঁজে বের করা।

যোগফলকে সর্বাধিক করার জন্য আমাদের অ্যারে থেকে সাব-অ্যারে খুঁজে বের করতে হবে এবং সমস্ত সাবঅ্যারেগুলির দৈর্ঘ্য মি-এর সমান করতে হবে।

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

ইনপুট

n =3, m =4arrOfArr[][] ={ {5, 2, -1, 4, -3} {3, -2, 1, 6} {-2, 0, 5}} 

আউটপুট

20

ব্যাখ্যা

সাবঅ্যারেগুলি হল {5, 4}, {6}, {5},দৈর্ঘ্য =2 + 1 + 1 =4সমষ্টি =5 + 4 + 6 + 5 =20

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

একটি গতিশীল প্রোগ্রামিং পদ্ধতি ব্যবহার করে সমস্যার সমাধান করা যেতে পারে। আমরা একটি DP অ্যারে তৈরি করব এবং k দৈর্ঘ্যের ক্রমবর্ধমান অ্যারের যোগফল গণনা করব যা 0 থেকে m পর্যন্ত পরিবর্তিত হয়।

DP অ্যারেতে, 2D ডিপিতে 0 থেকে m foreach অ্যারে পর্যন্ত সমস্ত দৈর্ঘ্যের জন্য সর্বাধিক অ্যারের যোগফল সংরক্ষণ করুন। তারপর সর্বোচ্চ যোগফল ফেরত দিন যা অ্যারের শেষ সারিতে হবে।

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

উদাহরণ

#include  namespace ব্যবহার করে std;#define N 5int findMax(int ​​a, int b){ if(a> b) রিটার্ন a; রিটার্ন b;}int findMaxSumArray(int arr[][N], int M) { int DP[N][M]; int sumArray[M]; int sum[M]; memset(DP, -1, sizeof(DP[0][0]) * N * M); sumArray[0] =0; DP[0][0] =0; জন্য (int i =1; i <=5; i++) { int len ​​=arr[i - 1][0]; (int j =1; j <=len; j++) { sumArray[j] =arr[i - 1][j]; sumArray[j] +=sumArray[j - 1]; যোগফল [j] =-100; } for (int j =1; j <=len &&j <=6; j++) for (int k =1; k <=len; k++) যদি (j + k - 1 <=len) যোগফল[j] =FindMax(sum[j], sumArray[j + k - 1] - sumArray[k - 1]); জন্য (int j =0; j <=6; j++) DP[i][j] =DP[i - 1][j]; (int j =1; j <=6; j++) এর জন্য (int cur =1; cur <=j &&cur <=len; cur++) DP[i][j] =findMax(DP[i][j] , DP[i - 1][j - cur] + যোগফল[cur]); } int maxSum =0; জন্য (int i =0; i <=6; i++) maxSum =findMax(maxSum, DP[5][i]); রিটার্ন maxSum;}int main() { int arr[][N] ={ { 3, 2, -1, 6 }, { 2, 7, -1 }, { 3, 2, 2, -4 } }; int m =4; cout<<""< 

আউটপুট

4 :15 এর থেকে কম বা সমান দৈর্ঘ্যের সর্বোচ্চ যোগফল বিন্যাস

  1. C++ এ বাইনারি ট্রিতে সর্বোচ্চ উল্লম্ব যোগফল খুঁজুন

  2. অ্যারেকে C++ এ সমান সমষ্টির দুটি সাবয়ারেতে ভাগ করা যায় কিনা তা খুঁজুন

  3. C++ এ n এর থেকে কম বা সমান সমস্ত ফ্যাক্টরিয়াল সংখ্যা খুঁজুন

  4. C++ এ একটি অ্যারেতে সর্বাধিক GCD সহ জোড়া খুঁজুন