আমাদের দুটি লকার দেওয়া হয়েছে, যেমন L1 এবং L2 যাতে কয়েন আকারে কিছু পরিমাণ টাকা থাকে৷ L1-এ A কয়েন আছে এবং L2-এ B নম্বর কয়েন আছে। আমাদের লকার থেকে টাকা বা কয়েন তুলতে হবে যাতে বের করা টাকা সর্বাধিক হয়। যেকোন লকার থেকে যতবার কয়েন তোলা হয়, তার আগের কাউন্টের থেকে 1 কম কয়েন দ্বারা প্রতিস্থাপিত হয়। যদি আমরা L1 থেকে A কয়েন আঁকি তাহলে এটি A-1 কয়েন দ্বারা প্রতিস্থাপিত হবে এবং যদি আমরা L2 থেকে B কয়েন আঁকি তাহলে এটি B-1 কয়েন দ্বারা প্রতিস্থাপিত হবে। কাজটি হল দুটি ধাপে উত্তোলিত অর্থের পরিমাণ সর্বাধিক করা। তার মানে কয়েন মাত্র দুবার তোলা যাবে।
ইনপুট৷ − L1 - 10, L2 - 11
আউটপুট −সর্বাধিক অর্থ যা দুটি ধাপে তোলা যাবে − 21
ব্যাখ্যা − ধাপ 1 এ আমরা L2 থেকে 11টি কয়েন প্রত্যাহার করি, L2 11-1=10 কয়েন দ্বারা প্রতিস্থাপিত হবে।
ধাপ 2-এ L1 এবং L2 উভয়েরই 10টি কয়েন রয়েছে তাই যে কোনওটি থেকে প্রত্যাহার করা যেতে পারে এবং আমাদের কাছে 11+10=21 কয়েন রয়েছে যা সর্বাধিক।
ইনপুট − L1-5, L2-5
আউটপুট −সর্বাধিক অর্থ যা দুটি ধাপে তোলা যায় − 10
ব্যাখ্যা − ধাপ 1 এ আমরা L1 থেকে 5টি কয়েন প্রত্যাহার করি, L1 5-1=4 কয়েন দ্বারা প্রতিস্থাপিত হবে।
ধাপ 2-এ L1-এ 4টি কয়েন এবং L2-এ 5টি কয়েন রয়েছে তাই আমরা L2 থেকে 5টি কয়েন নিই এবং আমাদের কাছে 5+5=10 কয়েন রয়েছে যা সর্বাধিক৷
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
আমাদের কাছে কিছু কয়েনের সাথে পূর্ণসংখ্যা হিসাবে দুটি লকার L1 এবং L2 রয়েছে।
-
ফাংশন maxMoney(int A, int B) লকারে কয়েনের সংখ্যা ইনপুট হিসাবে নেয়।
-
maxMoney() এর ভিতরে আমরা সর্বাধিক পরিমাণ অর্থ সঞ্চয় করতে পরিবর্তনশীল 'টাকা' নিই।
-
প্রাথমিকভাবে অর্থ A বা B থেকে যেটি বেশি হয় তার থেকে মূল্য নেয়।(money=A>B?A:B)
-
কোন পাত্রের কয়েন উত্তোলন করা হয়েছে তা পরীক্ষা করতে A বা B এর সাথে টাকার মূল্য তুলনা করুন।
-
এখন সেই পাত্রটিকে আগের পরিমাণের চেয়ে 1 কম দিয়ে প্রতিস্থাপন করুন। (A-- বা B--)
-
আবার টাকা A বা B থেকে যেটি বেশি হবে তার মান যোগ করবে। (টাকা+=A>B?A:B)
k ছোট হলে সবচেয়ে ছোট k উপাদানের সর্বনিম্ন যোগফল −
হবে -
D1-এ abs((পুরো অ্যারের যোগফল) - (2*সর্বনিম্ন k উপাদানের যোগফল))। দুবার কারণ অ্যারের সমষ্টিতেও এই উপাদানগুলি রয়েছে৷
৷যদি k বড় হয় তাহলে সবচেয়ে বড় k উপাদানের সর্বোচ্চ যোগফল হবে −
-
D2-এ abs((পুরো অ্যারের যোগফল) - (2*সর্বোচ্চ k উপাদানের যোগফল))। দুবার কারণ অ্যারের সমষ্টিতেও এই উপাদানগুলি রয়েছে৷
৷ -
D2 এর সাথে D1 তুলনা করুন এবং সর্বাধিক মান maxD-এ সংরক্ষণ করুন।
-
ফলাফল হিসাবে maxD ফেরত দিন।
উদাহরণ
Code: #include <stdio.h> #include <math.h> // Function to return the maximum coins we can get int maxMoney(int A, int B){ //take coins int money=A>B?A:B; //refill the lockers with 1 less no.of coins if(money==A) A--; else B--; //withdraw again money+=A>B?A:B; return money; } // Driver code int main(){ int L1 = 8, L2 = 9; printf("Maximum money that can be withdrawn in two steps: %d" , maxMoney(L1, L2)); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেMaximum money that can be withdrawn in two steps: 17