প্রদত্ত টাস্ক হল a, b এবং c দৈর্ঘ্যের সর্বাধিক সংখ্যক লাইন সেগমেন্ট খুঁজে বের করা যা প্রদত্ত ধনাত্মক পূর্ণসংখ্যা N থেকে গঠিত হতে পারে।
আসুন এখন বুঝতে পারি −
একটি উদাহরণ ব্যবহার করে আমাদের কী করতে হবেইনপুট − N=8, a=3, b=1, c=2
আউটপুট৷ − 8
ব্যাখ্যা − N কে b-এর 8টি সেগমেন্টে ভাগ করা যেতে পারে যা সর্বোচ্চ সংখ্যক সেগমেন্ট তৈরি করা যায়।
ইনপুট − N=13, a=2, b=7, c=3
আউটপুট − 6
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
ফাংশনে MaxSegment() int টাইপের একটি অ্যারে MaxSeg[N +1] ঘোষণা করে এবং মান -1 দিয়ে শুরু করে।
-
শূন্য-ম সূচকটি 0-এর সমান রাখুন কারণ এতে কোনো সেগমেন্ট থাকবে না।
-
i=0 থেকে i
-
উপরের if স্টেটমেন্টের ভিতরে আরেকটি স্টেটমেন্ট লিখুন if(i + a <=N) এবং putMaxSeg[i + a] =max(MaxSeg[i] + 1, MaxSeg[i + a]);
-
b এবং c উভয়ের জন্য উপরের ধাপটি পুনরাবৃত্তি করুন।
-
লুপের বাইরে, MaxSeg[N] ফেরত দিন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int MaxSegment(int N, int a,int b, int c){
/* It will store the maximum number of segments each index can have*/
int MaxSeg[N + 1];
// initialization
memset(MaxSeg, -1, sizeof(MaxSeg));
// 0th index will have 0 segments
MaxSeg[0] = 0;
// traversing for every segments till n
for (int i = 0; i < N; i++){
if (MaxSeg[i] != -1){
if(i + a <= N ){
MaxSeg[i + a] = max(MaxSeg[i] + 1, MaxSeg[i + a]);
}
if(i + b <= N ){
MaxSeg[i + b] = max(MaxSeg[i] + 1, MaxSeg[i + b]);
}
if(i + c <= N ){
MaxSeg[i + c] = max(MaxSeg[i] + 1, MaxSeg[i + c]);
}
}
}
return MaxSeg[N];
}
int main(){
int N = 13, a = 2, b = 7, c = 3;
cout << MaxSegment(N, a, b, c);
return 0;
} আউটপুট
আমরা উপরের কোডটি চালালে আমরা নিম্নলিখিত আউটপুট পাব −
6