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

सुपर एग ड्रॉप C++ में

मान लीजिए हमारे पास K अंडे हैं, और N मंजिलों वाली एक इमारत है जो 1 से N तक है। प्रत्येक अंडा कार्य में समान है, और यदि एक अंडा टूट जाता है, तो हम उसे फिर से नहीं गिरा सकते।

एक मंजिल F मौजूद है जो 0 और N के बीच है जैसे कि F से ऊंची किसी भी मंजिल से गिराया गया अंडा टूट जाएगा, और F पर या उससे नीचे गिराया गया अंडा नहीं टूटेगा। प्रत्येक चाल में, हम एक अंडा ले सकते हैं और उसे किसी भी मंजिल X से गिरा सकते हैं। X की रेंज 1 से N है।

हमारा लक्ष्य निश्चितता के साथ F का मान जानना है। तो, न्यूनतम चालों की संख्या क्या होगी जिनकी हमें निश्चितता के साथ F जानने के लिए आवश्यकता होगी, F के प्रारंभिक मान की परवाह किए बिना?

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

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

हम बाइनरी सर्च अनुकूलन के साथ DP का उपयोग करते हैं:

  • dp[K][N] = K अंडों और N मंजिलों के लिए न्यूनतम चालें

  • आधार मामले: N <= 1 या K == 1

  • प्रत्येक स्थिति के लिए, इष्टतम मंजिल mid खोजने के लिए बाइनरी सर्च करें

  • left = 1 + solve(K-1, mid-1) (अंडा टूटता है)

  • right = 1 + solve(K, N-mid) (अंडा नहीं टूटता)

  • max(left, right) को न्यूनतम करें

  • बाइनरी सर्च left और right को संतुलित करने के लिए समायोजित करें

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    vector<vector<int>> dp; 
    
    int solve(int K, int N) { 
        if (N <= 1) return N; 
        if (K == 1) return N; 
        if (dp[K][N] != -1) return dp[K][N]; 
        
        int ret = N; 
        int low = 0, high = N; 
        
        while (low <= high) { 
            int mid = low + (high - low) / 2; 
            int left = 1 + solve(K - 1, mid - 1); 
            int right = 1 + solve(K, N - mid); 
            ret = min(ret, max(left, right)); 
            
            if (left == right) break; 
            if (left < right) low = mid + 1; 
            else high = mid - 1; 
        } 
        return dp[K][N] = ret; 
    } 
    
    int superEggDrop(int K, int N) { 
        dp = vector<vector<int>>(K + 1, vector<int>(N + 1, -1)); 
        return solve(K, N); 
    } 
}; 

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

इनपुट

2, 6

आउटपुट

3
  1. - C++ Enum: एक पूर्ण गाइड

    C++ Enum का उपयोग कैसे करें: एक गाइड एक एन्यूमरेटेड टाइप एक उपयोगकर्ता-परिभाषित डेटा प्रकार है जिसे मानों की एक श्रृंखला से एक मान निर्दिष्ट किया जा सकता है। एनम का उपयोग अक्सर प्रोग्रामिंग में तब किया जाता है जब एक वेरिएबल को केवल मानों के एक विशिष्ट सेट में से एक मान स्टोर करने में सक्षम होना चाहि

  1. ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है

  1. - लिनक्स पर C++ के लिए शीर्ष IDE

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। यहां लिनक्स के लिए सर्वश्रेष्ठ C/C++ IDEs की सूची दी गई है। NetBeans