কম্পিউটার

C++ এ মিউজিক প্লেলিস্টের সংখ্যা


ধরুন আমাদের একটি মিউজিক প্লেয়ার আছে, যেটিতে N বিভিন্ন গান রয়েছে এবং আমরা আমাদের ভ্রমণের সময় L গান শুনতে চাই। তাই আমাদের একটি প্লেলিস্ট তৈরি করতে হবে যাতে এটি এই শর্তগুলি পূরণ করে -

  • প্রতিটি গান অন্তত একবার বাজানো হয়

  • একটি গান শুধুমাত্র তখনই আবার বাজানো যাবে যদি K অন্যান্য গান বাজানো থাকে।

আমাদের সম্ভাব্য প্লেলিস্টের সংখ্যা খুঁজে বের করতে হবে। উত্তরটি অনেক বড় হতে পারে, তাই আমরা এটি মডিউল 10^9 + 7 ফেরত দেব।

সুতরাং, যদি ইনপুটটি হয় N =2, L =3, K =0, তাহলে আউটপুট হবে 6, কারণ 6টি সম্ভাব্য প্লেলিস্ট [1,1,2], [1,2,1], [2] ,1,1], [2,2,1], [2,1,2], [1,2,2]।

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

  • একটি ফাংশন add() সংজ্ঞায়িত করুন, এটি a, b,

    লাগবে
  • ফিরুন ((a mod m) + (b mod m)) mod m

  • একটি ফাংশন সাব() সংজ্ঞায়িত করুন, এটি a, b,

    লাগবে
  • ফিরুন ((a mod m) - (b mod m) + m) mod m

  • একটি ফাংশন mul() সংজ্ঞায়িত করুন, এটি a, b,

    লাগবে
  • (a mod m) * (b mod m)) mod m

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

  • dp(L + 1) x (N + 1) আকারের একটি 2d ​​অ্যারে তৈরি করুন

  • dp[0, 0] :=1

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

    • j শুরু করার জন্য :=1, যখন j <=N, আপডেট করুন (j 1 দ্বারা বৃদ্ধি করুন), করুন −

      • dp[i, j] :=mul(dp[i - 1, j - 1], (N - (j - 1)))

      • যদি j> K, তাহলে −

        • dp[i, j] :=add(dp[i, j], mul(dp[i - 1, j], j - K))

  • dp[L, N>

    ফেরত দিন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
const int m = 1e9 + 7;
typedef long long int lli;
class Solution {
   public:
   int add(lli a, lli b){
      return ((a % m) + (b % m)) % m;
   }
   int sub(lli a, lli b){
      return ((a % m) - (b % m) + m) % m;
   }
   int mul(lli a, lli b){
      return ((a % m) * (b % m)) % m;
   }
   int numMusicPlaylists(int N, int L, int K) {
      vector < vector <int> > dp(L + 1, vector <int>(N + 1));
      dp[0][0] = 1;
      for(int i = 1; i <= L; i++){
         for(int j = 1; j <= N; j++){
            dp[i][j] = mul(dp[i - 1][j - 1], (N - (j - 1)));
            if(j > K){
               dp[i][j] = add(dp[i][j], mul(dp[i - 1][j], j -
               K));
            }
         }
      }
      return dp[L][N];
   }
};
main(){
   Solution ob;
   cout << (ob.numMusicPlaylists(2, 3, 0));
}

ইনপুট

2,3,0

আউটপুট

6

  1. C++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. C++ এ ছিটমহলের সংখ্যা

  4. C++ এ অ্যাডাম নম্বর