ধরুন আমরা রেটিং নামে একটি সংখ্যার তালিকা দিয়েছি এবং এটি কোডারদের পারফরম্যান্স স্কোর দেখাচ্ছে। এখন ম্যানেজার প্রতিটি কোডারকে 1000 টাকা দিতে চান যদি দুটি কোডার সংলগ্ন থাকে তবে তারা আরও ভাল পারফরম্যান্সকারী কোডারকে খারাপ পারফরম্যান্সের চেয়ে কমপক্ষে 1000 টাকা বেশি দিতে চায়। উপরের সীমাবদ্ধতাগুলি অনুসরণ করে ম্যানেজার যে ন্যূনতম অর্থ প্রদান করতে পারে তা আমাদের খুঁজে বের করতে হবে৷
সুতরাং, ইনপুট যদি রেটিং =[1, 2, 5, 1] এর মত হয়, তাহলে আউটপুট হবে 7000, যেহেতু আমরা প্রতিটি সংশ্লিষ্ট কোডারের জন্য সর্বনিম্ন অর্থ প্রদান করতে পারি [1000, 2000, 3000, 1000]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
pay:=রেটিং এর আকারের একটি তালিকা, প্রাথমিকভাবে সমস্ত মান 1
-
আমার জন্য রেঞ্জ 1 থেকে রেটিং এর আকার - 1, করুন
-
যদি রেটিং[i]> রেটিং [i-1] হয়, তাহলে
-
pay[i] :=pay[i-1]+1
-
-
-
রেটিং-2 থেকে 0 এর রেঞ্জ সাইজের জন্য, 1 দ্বারা হ্রাস করুন, করুন
-
যদি রেটিং[i]> রেটিং[i+1] হয়, তাহলে
-
pay[i] :=সর্বোচ্চ বেতন[i] এবং পে[i+1]+1
-
-
-
ফেরত (বেতনের উপাদানের যোগফল) *1000
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, ratings): pay=[1 for _ in ratings] for i in range(1, len(ratings)): if ratings[i] > ratings[i-1]: pay[i] = pay[i-1]+1 for i in range(len(ratings)-2,-1,-1): if ratings[i] > ratings[i+1]: pay[i] = max(pay[i], pay[i+1]+1) return sum(pay)*1000 ob = Solution() ratings = [1, 2, 5, 1] print(ob.solve(ratings))
ইনপুট
[1, 2, 5, 1]
আউটপুট
7000