ধরুন পূর্ণসংখ্যার একটি n x n ম্যাট্রিক্স ম্যাট আছে। আমাদের সূচকের সমস্ত পছন্দের উপর ম্যাট(c, d)- - mat(a, b) এর সর্বোচ্চ মান খুঁজে বের করতে হবে। এখানে আমাদের মনে রাখতে হবে c> a এবং d> b। তাই ম্যাট্রিক্স যদি −
এর মত হয়
1 | 2 | -1 | -4 | -20 |
-8 | -3 | 4 | 2 | 1 |
3 | 8 | 6 | 1 | 3 |
-4 | -1 | 1 | 7 | -6 |
0 | -4 | 10 | -5 | 1 |
আউটপুট 18 হবে। এর কারণ হল ম্যাট[4, 2] - ম্যাট[1, 0] =18-এর সর্বোচ্চ পার্থক্য রয়েছে।
এটি সমাধান করার জন্য আমরা ম্যাট্রিক্সটিকে এমনভাবে প্রিপ্রসেস করব যাতে সূচক(i, j) ম্যাট্রিক্সে (i, j) থেকে (n - 1, n - 1) পর্যন্ত উপাদানগুলির সর্বাধিক সঞ্চয় করে এবং এই প্রক্রিয়ায় এখনও পর্যন্ত পাওয়া সর্বাধিক মান আপডেট করতে থাকে . তারপর আমরা সর্বোচ্চ মান ফেরত দেব।
উদাহরণ
#include<iostream> #define N 5 using namespace std; int findMaxValue(int matrix[][N]) { int maxValue = -99999; int arr_max[N][N]; arr_max[N-1][N-1] = matrix[N-1][N-1]; int max_val = matrix[N-1][N-1]; for (int j = N - 2; j >= 0; j--) { if (matrix[N-1][j] > max_val) max_val = matrix[N - 1][j]; arr_max[N-1][j] = max_val; } max_val = matrix[N - 1][N - 1]; for (int i = N - 2; i >= 0; i--) { if (matrix[i][N - 1] > max_val) max_val = matrix[i][N - 1]; arr_max[i][N - 1] = max_val; } for (int i = N-2; i >= 0; i--) { for (int j = N-2; j >= 0; j--) { if (arr_max[i+1][j+1] - matrix[i][j] > maxValue) maxValue = arr_max[i + 1][j + 1] - matrix[i][j]; arr_max[i][j] = max(matrix[i][j],max(arr_max[i][j + 1],arr_max[i + 1][j]) ); } } return maxValue; } int main() { int mat[N][N] = { { 1, 2, -1, -4, -20 }, { -8, -3, 4, 2, 1 }, { 3, 8, 6, 1, 3 }, { -4, -1, 1, 7, -6 }, { 0, -4, 10, -5, 1 } }; cout << "Maximum Value is " << findMaxValue(mat); }
আউটপুট
Maximum Value is 18