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

पेंट हाउस II - C++


मान लीजिए हमारे पास एक पंक्ति में n घर हैं, अब प्रत्येक घर को k रंगों में से एक से रंगा जा सकता है। प्रत्येक घर को एक निश्चित रंग से रंगने की लागत अलग है। अब हमें ध्यान रखना होगा कि हमें सभी घरों को इस तरह रंगना है कि कोई दो आसन्न घरों का रंग समान न हो।

प्रत्येक घर को एक निश्चित रंग से रंगने की लागत n x k क्रम के एक मैट्रिक्स द्वारा दर्शाई गई है। और हमें सभी घरों को रंगने की न्यूनतम लागत ढूंढनी है।

तो, यदि इनपुट इस तरह है

153
294

तो आउटपुट 5 होगा, क्योंकि घर 0 को रंग 0 से रंगें, घर 1 को रंग 2 से रंगें। फिर न्यूनतम लागत 1 + 4 = 5 है; या घर 0 को रंग 2 से रंगें, घर 1 को रंग 0 से रंगें। न्यूनतम लागत 3 + 2 = 5 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −

  • n := costs का पंक्ति आकार

  • m := (यदि n शून्येतर है, तो costs का स्तंभ आकार, अन्यथा 0)

  • ret := inf

  • i := 1 से आरंभ करें, जब i <n, अद्यतन करें (i को 1 से बढ़ाएं), करें −

    • req := inf

    • आकार m का एक ऐरे lmins परिभाषित करें

    • आकार m का एक ऐरे rmins परिभाषित करें

    • lmins[0] := costs[i - 1, 0]

    • rmins[m - 1] = costs[i - 1, m - 1]

    • j := 1 से आरंभ करें, जब j < m, अद्यतन करें (j को 1 से बढ़ाएं), करें −

      • lmins[j] := costs[i - 1, j] और lmins[j - 1] का न्यूनतम

    • j := m - 2 से आरंभ करें, जब j >= 0, अद्यतन करें (j को 1 से घटाएं), करें −

      • rmins[j] := costs[i - 1, j] और rmins[j + 1] का न्यूनतम

    • j := 0 से आरंभ करें, जब j < m, अद्यतन करें (j को 1 से बढ़ाएं), करें −

      • left := (यदि j - 1 >= 0, तो lmins[j - 1], अन्यथा inf)

      • right := (यदि j + 1 < m, तो rmins[j + 1], अन्यथा inf)

      • costs[i, j] := costs[i, j] + min(left, right)

  • i := 0 से आरंभ करें, जब i < m, अद्यतन करें (i को 1 से बढ़ाएं), करें −

    • ret := ret और costs[n - 1, i] का न्यूनतम

  • लौटाएं (यदि ret, inf के समान है, तो 0, अन्यथा ret)

उदाहरण 

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −

#include <bits/stdc++.h> using namespace std; class Solution { public:    int minCostII(vector<vector<int>>& costs) {       int n = costs.size();       int m = n ? costs[0].size() : 0;       int ret = INT_MAX;       for (int i = 1; i < n; i++) {          int req = INT_MAX;          vector<int> lmins(m);          vector<int> rmins(m);          lmins[0] = costs[i - 1][0];          rmins[m - 1] = costs[i - 1][m - 1];          for (int j = 1; j < m; j++) {             lmins[j] = min(costs[i - 1][j], lmins[j - 1]);          }          for (int j = m - 2; j >= 0; j--) {             rmins[j] = min(costs[i - 1][j], rmins[j + 1]);          }          for (int j = 0; j < m; j++) {             int left = j - 1 >= 0 ? lmins[j - 1] : INT_MAX;             int right = j + 1 < m ? rmins[j + 1] : INT_MAX;             costs[i][j] += min(left, right);          }       }       for (int i = 0; i < m; i++) {          ret = min(ret, costs[n - 1][i]);       }       return ret == INT_MAX ? 0 : ret;    } }; main(){    Solution ob;    vector<vector<int>> v = {{1,5,3},{2,9,4}};    cout <<(ob.minCostII(v)); }

इनपुट

{{1,5,3},{2,9,4}}

आउटपुट

5

  1. N × 3 ग्रिड को रंगने के तरीकों की संख्या - C++ प्रोग्राम N × 3 ग्रिड को रंगने के तरीकों की संख्या - C++ प्रोग्राम

    मान लीजिए हमारे पास एक ग्रिड है जिसका आकार n x 3 है और हम ग्रिड के प्रत्येक सेल को तीन रंगों में से ठीक एक से रंगना चाहते हैं। यहां उपयोग किए जाने वाले रंग लाल, पीला और हरा हैं।अब एक प्रतिबंध है, कि कोई दो आसन्न सेल एक ही रंग के नहीं हो सकते। हमारे पास ग्रिड की n संख्या में पंक्तियाँ हैं। अंत में, ह

  1. C++ में N×3 ग्रिड को रंगने के तरीकों की संख्या C++ में N×3 ग्रिड को रंगने के तरीकों की संख्या

    समस्या विवरण मान लीजिए हमारे पास n x 3 आकार का एक ग्रिड है और हम ग्रिड के प्रत्येक सेल को तीन रंगों में से ठीक एक से रंगना चाहते हैं। रंग हैं लाल, पीला या हरा। अब एक प्रतिबंध है कि कोई भी दो आसन्न सेल का रंग समान नहीं होना चाहिए। हमारे पास n ग्रिड की पंक्तियों की संख्या है। हमें उन तरीकों की संख्या

  1. C++ में हाउस रॉबर III C++ में हाउस रॉबर III

    मान लीजिए एक चोर ने अपनी चोरी के लिए एक नई जगह ढूंढ ली है। इस क्षेत्र में केवल एक प्रवेश द्वार है, प्रवेश द्वार को रूट कहा जाता है। रूट के अलावा, प्रत्येक घर का एक और केवल एक पैरेंट घर होता है। एक दौरे के बाद, स्मार्ट चोर को लगा कि इस जगह के सभी घर एक बाइनरी ट्री बनाते हैं। और यदि दो सीधे-लिंक्ड घरो