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

C++ में डंजिओन गेम


मान लीजिए एक कहानी है जैसे राक्षसों ने राजकुमारी को पकड़ लिया जिसका नाम P है और उसे एक कालकोठरी के निचले-दाएं कोने में कैद कर दिया। कालकोठरी में M पंक्ति, N स्तंभ ग्रिड जैसे कमरे हैं। हमारा बहादुर शूरवीर K प्रारंभ में ऊपरी-बाएं कमरे में स्थित था और राजकुमारी को बचाने के लिए कालकोठरी से लड़ते हुए आगे बढ़ना होगा।

अब शूरवीर के पास एक प्रारंभिक स्वास्थ्य बिंदु है जो एक धनात्मक पूर्णांक द्वारा दर्शाया गया है। यदि किसी भी बिंदु पर उसका स्वास्थ्य बिंदु 0 या उससे नीचे चला जाता है, तो वह उसी क्षण मर जाता है।

कुछ कमरों में उस कमरे की रखवाली करने वाले राक्षस हैं, इसलिए शूरवीर उन कमरों में प्रवेश करने पर स्वास्थ्य खो देता है (ऋणात्मक पूर्णांक); अन्य कमरे या तो खाली हैं या जादुई गोले हैं जो शूरवीर का स्वास्थ्य बढ़ाते हैं (धनात्मक पूर्णांक)।

तो यदि वह जल्द से जल्द राजकुमारी तक पहुंचना चाहता है, तो शूरवीर प्रत्येक चरण में केवल दाएं या नीचे जाने का फैसला करता है। हमें न्यूनतम प्रारंभिक स्वास्थ्य ढूंढना होगा जो P तक पहुंचने के लिए पर्याप्त होगा। तो यदि इनपुट जैसा है, तो उत्तर 6 होगा, जैसे K, P तक पहुंच सकता है, पथ दाएं -> दाएं -> नीचे -> नीचे का उपयोग करके

-2(k)-23
-5-101
1030-5p

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

  • r := dp की पंक्ति, c := dp का स्तंभ

  • j := r - 2 से आरंभ करें, जब j >= 0, j को 1 से घटाएं करें -

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

  • j := c - 2 से आरंभ करें, जब j >= 0, j को 1 से घटाएं करें -

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

  • i := r - 2 से आरंभ करें, जब i >= 0, i को 1 से घटाएं करें -

    • j := c - 2 से आरंभ करें, जब j >= 0, j को 1 से घटाएं करें -

      • dp[i, j] := dp[i, j] और dp[i, j] + dp[i + 1, j] और dp[i, j] + dp[i, j + 1] के अधिकतम का न्यूनतम

  • यदि dp[0, 0] <= 0, तो,

    • |dp[0, 0]| + 1 लौटाएं

  • 1 लौटाएं

उदाहरण

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

#include <bits/stdc++.h> using namespace std; typedef long long int lli; lli min(lli a, lli b){    return a <= b ? a : b; } lli max(lli a, lli b){    return a <= b ? b : a; } class Solution { public:    int calculateMinimumHP(vector<vector<int>>& dp) {       int r = dp.size();       int c = dp[0].size();       for(lli j=r-2;j>=0;j--){          dp[j][c-1] = min(dp[j][c-1], dp[j][c-1]+dp[j+1][c-1]);       }       for(lli j = c-2;j>=0;j--){          dp[r-1][j] =min(dp[r-1][j], dp[r-1][j]+dp[r-1][j+1]);       }       for(lli i = r-2;i>=0;i--){          for(lli j = c-2;j>=0;j--){             dp[i][j] = min(dp[i][j],max(dp[i][j]+dp[i+1][j],dp[i][j]+dp[i][j+1]));          }       }       if(dp[0][0] <= 0 )return abs(dp[0][0])+1;       return 1;    } }; main(){    Solution ob;    vector<vector<int>> v = {{-2,-2,3},{-5,-10,1},{10,30,-5}};    cout << (ob.calculateMinimumHP(v)); }

इनपुट

{{-2,-2,3},{-5,-10,1},{10,30,-5}}

आउटपुट

6

  1. C++ में जंप गेम IV C++ में जंप गेम IV

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम प्रारंभ में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर कूद सकते हैं जहां: i + x = 0, j जहां: arr[i] और arr[j] समान हैं और i और j समान नहीं हैं। यहां n सरणी का आकार है। हमें सरणी के अंतिम इंडेक्स तक पहुंचने के लिए न्यूनतम चरणों की स

  1. C++ में जंप गेम V C++ में जंप गेम V

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी और एक पूर्णांक d है। एक चरण में हम इंडेक्स i से कूद सकते हैं: i + x जहां: i + x < n और x की सीमा 1 से d है। = 0 और x की सीमा 1 से d है। arr[k] हो। हम सरणी के किसी भी इंडेक्स से कूदना शुरू कर सकते हैं। हमें अधिकतम इंडेक्स की संख्या ज्ञात करनी है ज

  1. - C++ में कॉइन गेम में विजेता प्रेडिक्ट करें

    इस गेम में, दो खिलाड़ी X और Y हैं। हमारा कार्य यह प्रेडिक्ट करना है कि यदि दोनों इष्टतम खेलते हैं और X गेम शुरू करता है तो कौन जीतेगा।गेमकॉइन गेम में, N और M संख्या के सिक्कों वाले दो ढेर हैं। खिलाड़ियों में से एक गेम के लिए दो ढेरों में से किसी एक को चुनता है। फिर कार्य ढेर को दो हिस्सों में विभाजि