কম্পিউটার টিউটোরিয়াল

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

সমস্যা বিবরণ

Nটি আলাদা গান এবং L দৈর্ঘ্যের প্লেলিস্ট দেওয়া থাকলে, শর্তাবলী: ১) প্রতিটি গান কমপক্ষে একবার বাজবে, ২) একই গান আবার বাজাতে হলে মাঝপথে Kটি অন্য গান বাজতে হবে। সম্ভাব্য প্লেলিস্টের সংখ্যা বের করতে হবে (মডুলো 10^9+7)।

উদাহরণ

N=2, L=3, K=0 → আউটপুট = 6 (প্লেলিস্ট: [1,1,2], [1,2,1], [2,1,1], [2,2,1], [2,1,2], [1,2,2])

সমাধান পদ্ধতি

  • DP[i][j] = i দৈর্ঘ্যে jটি ইউনিক গান দিয়ে প্লেলিস্টের সংখ্যা।
  • ট্রানজিশন: নতুন গান যোগ করা বা পুরনো গান রিপিট করা (j > K হলে)।
  • মডুলার অ্যারিথমেটিক (add, mul) ব্যবহার করা হয়।

C++ বাস্তবায়ন

#include <bits/stdc++.h>
using namespace std;
const int m = 1e9 + 7;
typedef long long int lli;

class Solution {
    int add(lli a, lli b) { return ((a % m) + (b % m)) % m; }
    int mul(lli a, lli b) { return ((a % m) * (b % m)) % m; }
    
public:
    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];
    }
};

int main() {
    Solution ob;
    cout << ob.numMusicPlaylists(2, 3, 0);
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: 2, 3, 0

আউটপুট: 6

  1. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. সি++-এ নাম্বার অফ এনক্লেভস (Number of Enclaves)

  4. C++-এ অ্যাডাম সংখ্যা (Adam Number) চেক করার পদ্ধতি