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

C++ में लंबाई p, q और r के सेगमेंट्स की संख्या को अधिकतम करना


समस्या कथन

लंबाई L की एक रॉड दी गई है, कार्य रॉड को इस तरह काटना है कि लंबाई p, q और r के सेगमेंट्स की कुल संख्या अधिकतम हो। सेगमेंट्स केवल लंबाई p, q, और r के हो सकते हैं।

यदि l = 15, p = 2, q = 3 और r = 5 तो हम 7 सेगमेंट्स बना सकते हैं:

{2, 2, 2, 2, 2, 2, 3}

एल्गोरिदम

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

1. dp[] ऐरे को 0 से प्रारंभ करें।
2. रॉड की लंबाई तक पुनरावृति करें। प्रत्येक i के लिए, यदि संभव हो तो p, q और r का कट करें।
3. सभी संभावित कट्स के लिए ans[i+p] = max(ans[i+p], 1 + ans[i]), ans[i+q] = max(ans[i+q], 1 + ans[i]) और ans[i+r] = max(ans[i+r], 1 + ans[i]) प्रारंभ करें।
4. ans[i] 0 होगा यदि i-वें इंडेक्स पर कट संभव नहीं है। ans[l] अधिकतम संभव कट्स की संख्या देगा।

उदाहरण

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

int getMaximumSegments(int l, int p, int q, int r) {
    int dp[l + 1];
    memset(dp, -1, sizeof(dp));
    dp[0] = 0;
    for (int i = 0; i <= l; ++i) {
        if (dp[i] == -1) {
            continue;
        }
        if (i + p <= l) {
            dp[i + p] = max(dp[i + p], dp[i] + 1);
        }
        if (i + q <= l) {
            dp[i + q] = max(dp[i + q], dp[i] + 1);
        }
        if (i + r <= l) {
            dp[i + r] = max(dp[i + r], dp[i] + 1);
        }
    }
    return dp[l];
}

int main() {
    int l = 15, p = 2, q = 3, r = 5;
    cout << "Number of segments = " << getMaximumSegments(l, p, q, r) << endl;
    return 0;
}

आउटपुट

Number of segments = 7
  1. - C++ में n सेट और m अनसेट बिट्स वाली सबसे बड़ी संख्या ज्ञात करें

    इस समस्या में, हमें दो पूर्णांक मान, n और m दिए गए हैं। हमारा कार्य बाइनरी प्रतिनिधित्व में n सेट और m अनसेट बिट्स वाली सबसे बड़ी संख्या ज्ञात करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं इनपुट : n = 3, m = 1 आउटपुट : 14 व्याख्या − सबसे बड़ी संख्या में 3 सेट बिट्स और फिर 1 अनसेट बिट होगा

  1. - C++ में दिए गए अंकों की संख्या और अंकों के योग के साथ सबसे बड़ी संख्या ज्ञात करें

    इस समस्या में, हमें दो पूर्णांक मान दिए गए हैं, N जो संख्या के अंकों की संख्या को दर्शाता है और sum जो संख्या के अंकों के योग को दर्शाता है। हमारा कार्य दिए गए अंकों की संख्या और अंकों के योग के साथ सबसे बड़ी संख्या ज्ञात करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट : N = 3, sum = 15 आउ

  1. C++ का उपयोग करके फुटबॉल पर पेंटागन और हेक्सागन की संख्या ज्ञात करें C++ का उपयोग करके फुटबॉल पर पेंटागन और हेक्सागन की संख्या ज्ञात करें

    जैसा कि हम सभी जानते हैं, पेंटागन और हेक्सागन फुटबॉल के समान रूप से आवश्यक भाग हैं। ये आकृतियाँ एक पहेली की तरह एक साथ फिट होती हैं ताकि एक पूरी तरह से गोलाकार आकार बनाया जा सके। तो यहाँ हमारे पास एक फुटबॉल है, जिसमें हमें हेक्सागन और पेंटागन ढूंढने हैं।हम समस्या को आसानी से हल करने के लिए यूलर विशे