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

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

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

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

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

  • प्री () नामक एक विधि को परिभाषित करें

  • प्रारंभ करने के लिए i :=0, जब i<=N, i को 1 से बढ़ाएँ -

    • j :=0 को इनिशियलाइज़ करने के लिए, जब j<=N, j को 1 से बढ़ाएँ -

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

  • हल () नामक एक विधि को परिभाषित करें, यह गिरफ्तारी, i, n, k और स्थिति लेगा

  • अगर मैं n के समान हूं, तो,

    • अगर स्थिति शून्य नहीं है, तो,

      • वापसी - 100000

    • वापसी 0

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

    • वापसी डीपी [i, के, स्थिति]

  • उत्तर:=हल करें (गिरफ्तारी, i + 1,n, k, स्थिति)

  • अगर स्थिति शून्य नहीं है, तो,

    • उत्तर:=अधिकतम उत्तर, हल करें (arr,i + 1,n,k-1, स्थिति का व्युत्क्रम) + arr[i]

  • अन्यथा -

    • अगर k>0, तो,

      • उत्तर:=अधिकतम उत्तर, हल (arr,i + 1,n,k, स्थिति स्थिति के विपरीत) - arr[i]

  • वापसी डीपी [i, के, स्थिति]:=उत्तर

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

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

  • अगर k>=कीमतों का आकार /2, तो,

    • उत्तर:=0

    • आरंभ करने के लिए i :=1, जब i <कीमतों का आकार, i को 1 से बढ़ाएँ -

      • अगर कीमतें [i]> कीमतें [i-1], तो, उत्तर =उत्तर + कीमतें [i] - कीमतें [i - 1]

    • वापसी उत्तर

  • रिटर्न सॉल्व (कीमतें, 0, कीमतों का आकार, 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 बेहतरीन ऐप्स

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

  1. प्रयुक्त Android फ़ोन खरीदने और बेचने के लिए 5 सर्वश्रेष्ठ स्थान

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

  1. 10 साइटें जैसे क्रेगलिस्ट 2022 में खरीदने और बेचने के लिए

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