Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

संगीत प्लेलिस्ट की संख्या C++ में

मान लीजिए हमारे पास एक म्यूजिक प्लेयर है जिसमें N अलग-अलग गाने हैं और हम अपनी यात्रा के दौरान L गाने सुनना चाहते हैं। हमें एक प्लेलिस्ट बनानी है जो इन शर्तों को पूरा करती है:

  • हर गाना कम से कम एक बार बजाया जाए

  • एक गाना केवल तभी दोबारा बजाया जा सकता है जब K अन्य गाने बज चुके हों

हमें संभावित प्लेलिस्ट की संख्या ढूंढनी है। उत्तर बहुत बड़ा हो सकता है, इसलिए मॉड्यूलो 10^9 + 7 में वापस करें।

उदाहरण के लिए, यदि N = 2, L = 3, K = 0, तो आउटपुट 6 होगा।

हल करने का दृष्टिकोण

हम डायनामिक प्रोग्रामिंग का उपयोग करते हैं:

  • dp[i][j] = i लंबाई की प्लेलिस्ट जिसमें ठीक j अद्वितीय गाने हों

  • dp[0][0] = 1

  • संक्रमण: नया गाना जोड़ें: dp[i-1][j-1] * (N - (j-1))

  • पुराना गाना जोड़ें (यदि j > K): 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]; 
    } 
}; 

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

इनपुट

2,3,0

आउटपुट

6
  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस

  1. - C++ में एडम नंबर जांचना

    इस खंड में हम देखेंगे कि दी गई संख्या एडम नंबर है या नहीं, इसकी जांच करने वाला प्रोग्राम कैसे लिखें। कोड में जाने से पहले देखते हैं कि एडम नंबर क्या है? एडम नंबर वह संख्या है, मान लीजिए n, यदि n का वर्ग और n के रिवर्स का वर्ग एक-दूसरे के रिवर्स हैं, तो वह संख्या एडम नंबर है। उदाहरण के लिए संख्या 13