ধরুন একজন ডায়েটার ক্যালোরি গ্রহণ করেন[i], এটি প্রথম দিনে ক্যালোরি নির্দেশ করে৷ যদি আমাদের একটি পূর্ণসংখ্যা k থাকে, k দিনের প্রতিটি ক্রমাগত অনুক্রমের জন্য (ক্যালোরি[i], ক্যালোরি[i+1], ..., ক্যালোরি [i+k-1] সমস্ত 0 <=i <=n-k ), তারা T খুঁজে পায়। T হল k দিনের সেই ক্রমানুসারে খাওয়া মোট ক্যালোরি (ক্যালোরি[i] + ক্যালোরি[i+1] + ... + ক্যালোরি[i+k-1]):কিন্তু কিছু আছে শর্তাবলী;
- যদি T <কম বাউন্ড, তারা তাদের ডায়েটে খারাপ পারফর্ম করে তাই ১ পয়েন্ট হারায়;
- যদি T> উপরের বাউন্ড, তারা তাদের ডায়েটে ভালো পারফর্ম করে তাই ১ পয়েন্ট লাভ করে;
- অন্যথায়, তারা স্বাভাবিকভাবে পারফর্ম করেছে। তাই পয়েন্ট একই।
প্রথমে, ডায়েটারের শূন্য পয়েন্ট রয়েছে। আমাদের ডায়েটারের মোট পয়েন্টের সংখ্যা খুঁজে বের করতে হবে।
যদি অ্যারে [6,5,0,0] এবং k =2 এবং নিম্ন :=1 এবং উপরের :=5 হয়, তাহলে আউটপুট হবে 0। C[0] + C[1 ]> উপরের, তাই এক বিন্দু বাড়ান, নিম্ন <=C[1] + C[2] <=উপরের তাই কোন পরিবর্তন নেই, তারপর C[2] + C[3] <কম, তাই এক বিন্দু কমিয়ে ফেলুন, ফলে আউটপুট 0 হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- তাপ :=0
- আমি 0 থেকে k
- পরিসরে
- temp :=temp + C[k]
- ডান :=k – 1, এবং বাম :=0, এবং পয়েন্ট :=0
- যখন ডানে
- যদি টেম্প <কম হয়, তাহলে পয়েন্ট 1 কমিয়ে দিন, যদি টেম্প> উপরের হয়, তাহলে পয়েন্ট 1 করে বাড়ান
- temp :=temp – C[বাম]
- বাম এবং ডানে 1 দ্বারা বাড়ান
- যদি সঠিক>=C এর দৈর্ঘ্য, তাহলে লুপ থেকে বেরিয়ে আসুন
- temp :=temp + C[ডান]
উদাহরণ
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
<প্রি>শ্রেণির সমাধান(অবজেক্ট):def dietPlanPerformance(self, c, k, l, u):temp =0 i for range(k):temp +=c[i] right =k-1 left =0 পয়েন্ট =0 যখন ডানেইনপুট
[6,5,0,0]215
আউটপুট
0