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

C++ में स्टॉक खरीदने और बेचने का सर्वोत्तम समय IV


मान लीजिए हमारे पास एक सरणी है जिसके लिए i-वां तत्व दिन i के लिए दिए गए स्टॉक की कीमत है। हमें अधिकतम लाभ ढूंढने के लिए एक एल्गोरिदम तैयार करना है। हम अधिकतम k लेनदेन पूरे कर सकते हैं। तो यदि इनपुट [3,2,6,4,0,3] जैसा है और k = 2, तो आउटपुट 7 होगा, जैसे दिन 2 पर खरीदें (जब कीमत = 2) और दिन 3 पर बेचें (जब कीमत = 6), लाभ 6-2 = 4 होगा। फिर दिन 5 पर खरीदें (कीमत 0 है) और दिन 6 पर बेचें (कीमत 3 है), लाभ 3-0 = 3 होगा।

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

  • क्रम N + 5 x N + 5 x 2 की एक 3D सरणी परिभाषित करें

  • एक विधि pre() परिभाषित करें

  • i := 0 से आरंभ करें, जब i<=N, i को 1 से बढ़ाएं करें -

    • j := 0 से आरंभ करें, जब j<=N, j को 1 से बढ़ाएं करें -

      • dp[i, j, 1] := - 1, dp[i, j, 0] := - 1

  • एक विधि solve() परिभाषित करें, जो arr, i, n, k और status लेगी

  • यदि i, n के समान है, तो,

    • यदि status शून्येतर है, तो,

      • - 100000 लौटाएं

    • 0 लौटाएं

  • यदि dp[i, k, status] -1 के बराबर नहीं है, तो,

    • dp[i, k, status] लौटाएं

  • ans := solve(arr,i + 1,n,k,status)

  • यदि status शून्येतर है, तो,

    • ans := ans का अधिकतम, solve(arr,i + 1,n,k - 1, status का व्युत्क्रम) + arr[i]

  • अन्यथा -

    • यदि k>0, तो,

      • ans := ans का अधिकतम,solve(arr,i + 1,n,k,status का व्युत्क्रम) - arr[i]

  • dp[i, k, status] := ans लौटाएं

  • मुख्य विधि से निम्नलिखित करें -

  • फ़ंक्शन pre() को कॉल करें

  • यदि k >= prices के आकार /2, तो,

    • ans := 0

    • i := 1 से आरंभ करें, जब i < prices का आकार, i को 1 से बढ़ाएं करें -

      • यदि prices[i] > prices[i-1], तो, ans = ans + prices[i] - prices[i - 1]

    • ans लौटाएं

  • solve(prices,0, prices का आकार, k, 0) लौटाएं

उदाहरण

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

#include <bits/stdc++.h> using namespace std; typedef int lli; const lli N = 1000; lli dp[N + 5][N + 5][2]; class Solution {    public:    void pre(){       for(lli i =0;i<=N;i++){          for(lli j = 0;j<=N;j++){             dp[i][j][1]=-1;             dp[i][j][0]=-1;          }       }    }    lli solve(vector<int> &arr, lli i,lli n,lli k, lli status){       if(i == n){          if(status)return -100000;          return 0;       }       if(dp[i][k][status]!=-1)return dp[i][k][status];       lli ans = solve(arr, i+1,n,k,status);       if(status){          ans = max(ans,solve(arr,i+1,n,k-1,!status)+ arr[i]) ;       } else {          if(k>0){             ans = max(ans,(lli)solve(arr,i+1,n,k,!status)- arr[i]) ;          }       }       return dp[i][k][status] = ans;    }    int maxProfit(int k, vector<int>& prices) {       pre();       if(k>=prices.size()/2){          int ans = 0;          for(int i = 1; i < prices.size(); i++){             if(prices[i] > prices[i-1])ans += prices[i] - prices[i-1];          }          return ans;       }       return solve(prices,0,prices.size(),k,0);    } }; main(){    Solution ob;    vector<int> v = {3,2,6,4,0,3};    cout << (ob.maxProfit(2, v)); }

इनपुट

{ 3,2,6,4,0,3}

आउटपुट

7

  1. खरीदने और बेचने के लिए क्रेगलिस्ट जैसे 4 सर्वश्रेष्ठ ऐप्स खरीदने और बेचने के लिए क्रेगलिस्ट जैसे 4 सर्वश्रेष्ठ ऐप्स

    वर्षों से, खरीदार और विक्रेता क्रेगलिस्ट पर आते रहे हैं। हालांकि, क्रेगलिस्ट डिजिटल युग के साथ तालमेल नहीं रख पाया है। वेबसाइट पुरानी है और क्रेगलिस्ट ऐप बग्गी है। यह उल्लेख नहीं करना कि क्रेगलिस्ट घोटालों के लिए शीर्ष स्थानों में से एक है, और इस जोखिम को कम करने के लिए बहुत कुछ नहीं किया गया है। क्

  1. यूज्ड एंड्रॉयड फोन खरीदने और बेचने के लिए 5 सर्वश्रेष्ठ स्थान यूज्ड एंड्रॉयड फोन खरीदने और बेचने के लिए 5 सर्वश्रेष्ठ स्थान

    विभिन्न मार्केटप्लेसेस के लिए धन्यवाद, आजकल आप आसानी से यूज्ड एंड्रॉयड स्मार्टफोन खरीद या बेच सकते हैं। उपलब्ध कई विकल्प चॉइस के पैराडॉक्स को जन्म देते हैं, जिससे सबसे अच्छे और सबसे विश्वसनीय प्लेटफॉर्म्स को ढूंढना मुश्किल हो जाता है। आपको प्रत्येक की समीक्षा करने की परेशानी से गुजरने के बजाय, हमने

  1. 2024 में खरीदारी और बिक्री के लिए शीर्ष 10 विश्वसनीय Craigslist विकल्प 2024 में खरीदारी और बिक्री के लिए शीर्ष 10 विश्वसनीय Craigslist विकल्प

    Craigslist द्वारा अपने प्लेटफॉर्म से पर्सनल विज्ञापन सेक्शन हटाने के बाद भी अन्य विज्ञापनों के लिए खुले रहने के कारण, Craigslist जैसी वेबसाइट्स की भारी मांग है। Craigslist अभी भी नौकरी, आवश्यक वस्तुएं, आवास, सामुदायिक सेवा और बहुत कुछ खोजने के लिए सबसे अच्छा विकल्प है, बस एक क्लिक दूर। फिर भी वही पु