কম্পিউটার

C++ এ কাজের সময়সূচীর ন্যূনতম অসুবিধা


ধরুন আমরা d দিনের মধ্যে কাজের একটি তালিকা নির্ধারণ করতে চাই। কাজগুলি নির্ভরশীল তাই, i-th টাস্কে কাজ করতে, আমাদের সমস্ত কাজ j শেষ করতে হবে যেখানে 0 <=j

আমাদের প্রতিদিন অন্তত একটি কাজ শেষ করতে হবে। একটি টাস্ক শিডিউলের অসুবিধা আসলে d সংখ্যার প্রতিটি দিনের অসুবিধার সমষ্টি। একটি দিনের অসুবিধা হল সেই দিনে করা একটি কাজের সর্বোচ্চ অসুবিধা৷

তাই আমাদের কাছে টাস্কডিফিকালটি নামক পূর্ণসংখ্যার একটি অ্যারে রয়েছে এবং একটি পূর্ণসংখ্যা ডি। i-th কাজের অসুবিধা হল টাস্ক ডিফিকাল্টি[i]। আমাদের একটি টাস্ক শিডিউলের ন্যূনতম অসুবিধা খুঁজে বের করতে হবে। যদি আমরা কাজের জন্য একটি সময়সূচী খুঁজে না পাই, তাহলে -1 ফিরে আসুন।

সুতরাং, যদি ইনপুট টাস্ক ডিফিকালটি =[6,5,4,3,2,1], d =2,

এর মত হয়

C++ এ কাজের সময়সূচীর ন্যূনতম অসুবিধা

তাহলে আউটপুট হবে 7, যেমন 1 দিনে আমরা প্রথম 5 টি কাজ শেষ করতে পারি, মোট অসুবিধা 6। এখন 2 য় দিনে আমরা শেষ কাজ শেষ করতে পারি, মোট অসুবিধা 1, তাই সময়সূচীর অসুবিধা হবে 6 + 1 =7।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন সল্ভ() সংজ্ঞায়িত করুন, এটি একটি অ্যারে v, idx, k, একটি 2D dp,

  • যদি idx v এর আকারের সমান হয় এবং k 0 এর সমান হয়, তাহলে −

    • ফেরত 0

  • যদি k <0 বা idx v এবং k> 0 এর আকারের সমান হয়, তাহলে −

    • 1^6

      ফেরত দিন
  • যদি dp[idx, k] -1 এর সমান না হয়, তাহলে −

    • dp[idx, k]

      ফেরত দিন
  • maxVal :=0

  • ret :=inf

  • আরম্ভ করার জন্য i :=idx, যখন i <আকার v এর, আপডেট করুন (i 1 দ্বারা বাড়ান), করবেন −

    • maxVal :=সর্বাধিক v[i] এবং maxVal

    • ret :=ret এবং maxVal + সমাধানের সর্বনিম্ন (v, i + 1, k - 1, dp)

  • dp[idx, k] :=ret

  • রিটার্ন রিটার্ন

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • n :=j

    এর আকার
  • যদি d> n হয়, তাহলে −

    • রিটার্ন -1

  • n x (d + 1) আকারের একটি 2D অ্যারে dp সংজ্ঞায়িত করুন এবং এটি -1 দিয়ে পূরণ করুন

  • রিটার্ন সলভ (j, 0, d, dp)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<int>& v, int idx, int k, vector<vector<int> >&
   dp){
      if (idx == v.size() && k == 0)
      return 0;
      if (k < 0 || idx == v.size() && k > 0)
      return 1e6;
      if (dp[idx][k] != -1)
      return dp[idx][k];
      int maxVal = 0;
      int ret = INT_MAX;
      for (int i = idx; i < v.size(); i++) {
         maxVal = max(v[i], maxVal);
         ret = min(ret, maxVal + solve(v, i + 1, k - 1, dp));
      }
      return dp[idx][k] = ret;
   }
   int minDifficulty(vector<int>& j, int d){
      int n = j.size();
      if (d > n)
      return -1;
      vector<vector<int> > dp(n, vector<int>(d + 1, -1));
      return solve(j, 0, d, dp);
   }
};
main(){
   Solution ob;
   vector<int> v = {6,5,4,3,2,1};
   cout << (ob.minDifficulty(v, 2));
}

ইনপুট

{6,5,4,3,2,1}, 2

আউটপুট

7

  1. C++ এ দুটি নন-ওভারল্যাপিং ব্যবধানের ন্যূনতম আকার

  2. C++ এ ন্যূনতম স্ট্রিং

  3. C++ এ টিভি শো

  4. C++ এ কাজের সময়সূচীতে সর্বোচ্চ লাভ