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

C++ कोड हाउस मेकिंग द्वारा अधिकतम लाभ प्राप्त करने के लिए

मान लीजिए कि हमारे पास दो संख्याएँ n और h हैं, और m का एक अन्य सरणी T को तीन गुना करता है, जहाँ T[i] =(li, ri, xi)। एक सड़क पर, ऐसी n जगहें हैं जहाँ हम घर बना सकते हैं। धब्बे 1 से n के रूप में गिने जाते हैं। घर की ऊंचाई 0 से h तक हो सकती है। प्रत्येक स्थान पर यदि हम k ऊँचाई का घर बनाते हैं, तो हमें उससे k^2 राशि प्राप्त होगी। एम जोन प्रतिबंध हैं। ith प्रतिबंध कहता है:स्पॉट ली से री तक का सबसे ऊंचा घर, अधिकतम xi होना चाहिए। हम अपने लाभ को अधिकतम करने के लिए घर बनाना चाहते हैं। हमें अधिकतम संभव लाभ प्राप्त करना है जो हम कर सकते हैं। हमें अधिकतम लाभ प्राप्त करना है।

इसलिए, यदि इनपुट n =3 जैसा है; एच =3; टी =[[1,1,1], [2,2,3], [3,3,2]], तो आउटपुट 14 होगा, क्योंकि, 3 घर हैं, अधिकतम ऊंचाई 3 है, में पहले 1 और 1 के बीच सबसे ऊंचे घर को प्रतिबंधित करें, इसलिए यह अधिकतम 1 होना चाहिए। दूसरे प्रतिबंध में 2 और 2 के बीच सबसे ऊंचा घर और यह अधिकतम 3 होना चाहिए। इसी तरह तीसरे प्रतिबंध में 3 और 3 के बीच का सबसे ऊँचा घर जो अधिकतम 2 होना चाहिए। तो इष्टतम ऊँचाई [1,3,2] हैं। तो 1^2 + 3^2 + 2^2 =14.

कदम

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

m := size of T
Define an array heights n and fill with h
for initialize i := 0, when i < m, update (increase i by 1), do:
   l := T[i, 0]
   r := T[i, 1]
   h := T[i, 2]
   for initialize i := l - 1, when i < r, update (increase i by 1), do:
      heights[i] := minimum of heights[i] and h
ans := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   ans := ans + heights[i] * heights[i]
return ans

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
int solve(int n, int h, vector<vector<int>> T){
   int l, r;
   int m = T.size();
   vector<int> heights(n, h);
   for (int i = 0; i < m; i++){
      l = T[i][0];
      r = T[i][1];
      h = T[i][2];
      for (int i = l - 1; i < r; i++)
      heights[i] = min(heights[i], h);
   }
   int ans = 0;
   for (int i = 0; i < n; i++)
   ans += heights[i] * heights[i];
   return ans;
}
int main(){
   int n = 3;
   int h = 3;
   vector<vector<int>> T = { { 1, 1, 1 }, { 2, 2, 3 }, { 3, 3, 2 } };
   cout << solve(n, h, T) << endl;
}

इनपुट

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

आउटपुट

14

  1. C++ में जॉब शेड्यूलिंग में अधिकतम लाभ

    मान लीजिए कि हमारे पास अलग-अलग कार्य हैं, जहां प्रत्येक कार्य प्रारंभ समय [i] से समाप्ति समय [i] तक किया जाना निर्धारित है, उस कार्य के लिए हमें लाभ का लाभ मिलता है [i]। हम स्टार्टटाइम, एंडटाइम और प्रॉफिट लिस्ट को जानते हैं, हमें अधिकतम लाभ का पता लगाना होगा जो हम इस तरह ले सकते हैं कि ओवरलैपिंग टाइ

  1. सी++ में ग्रे कोड

    जैसा कि हम जानते हैं कि ग्रे कोड एक द्विआधारी अंक प्रणाली है जहां दो क्रमिक मान केवल एक बिट में भिन्न होते हैं। मान लीजिए कि हमारे पास कोड में बिट्स की कुल संख्या का प्रतिनिधित्व करने वाला एक गैर-ऋणात्मक पूर्णांक n है। हमें ग्रे कोड के सीक्वेंस को प्रिंट करना होता है। एक ग्रे कोड अनुक्रम 0 से शुरू ह

  1. C++ में वाइन की बिक्री से अधिकतम लाभ

    समस्या कथन एक पंक्ति में n वाइन दी गई है, जिसमें पूर्णांक क्रमशः प्रत्येक वाइन की लागत को दर्शाते हैं। हर साल आप पंक्ति में पहली या आखिरी शराब बेच सकते हैं। शराब की कीमत समय के साथ बढ़ती जाती है। बता दें कि वाइन से शुरुआती लाभ P1, P2, P3…Pn है। Yth वर्ष पर, ith वाइन से लाभ Y*Pi होगा। प्रत्येक वर्ष