📌  相关文章
📜  如果在第i天可以购买i个股票,则购买最大库存

📅  最后修改于: 2021-05-04 07:28:35             🧑  作者: Mango

在股票市场中,存在无限股票的产品。股票价格,给出了N天,其中常用3的股票[i]表示价格上的i天。有一个规则,一个客户最多可我的股票就买我一天。如果客户最初有k笔金额,请找出客户可以购买的最大股票数量。
例如,某股票的价格为3天,分别为7、10、4。您可以在第1天买入1支价值7卢比的股票,在第2天购买2支价值10卢比的股票,并在一天购买3支价值4卢比的股票。 3。

例子:

Input : price[] = { 10, 7, 19 }, 
              k = 45.
Output : 4
A customer purchases 1 stock on day 1, 
2 stocks on day 2 and 1 stock on day 3 for 
10, 7 * 2 = 14 and 19 respectively. Hence, 
total amount is 10 + 14 + 19 = 43 and number 
of stocks purchased is 4.

Input  : price[] = { 7, 10, 4 }, 
               k = 100.
Output : 6

这个想法是使用贪婪的方法,我们应该从股价最低的那一天开始购买产品,依此类推。
因此,我们将根据股票价格对两个值对(即{股票价格,日期}进行排序,如果股票价格相同,则将根据日期进行排序。
现在,我们将遍历对的排序列表,并开始购买,如下所示:
假设我们有R rs到现在为止,而今天的产品成本为C,那么我们在这一天最多可以购买L个产品,
这天的总购买量(P)=分钟(L,R / C)
现在,将此值添加到答案中。
这天的总购买量(P)=分钟(L,R / C)
现在,将此值添加到答案中
total_purchase = total_purchase + P,其中P = min(L,R / C)
现在,从剩余的钱中减去购买P项的成本,R = R – P * C。
我们可以购买的产品总数等于total_purchase。

以下是此方法的C++实现:

// CPP program to find maximum number of stocks that
// can be bought with given constraints.
#include 
using namespace std;
  
// Return the maximum stocks
int buyMaximumProducts(int n, int k, int price[])
{
    vector > v;
  
    // Making pair of product cost and number
    // of day..
    for (int i = 0; i < n; ++i) 
        v.push_back(make_pair(price[i], i + 1));    
  
    // Sorting the vector pair.
    sort(v.begin(), v.end());    
  
    // Calculating the maximum number of stock 
    // count.
    int ans = 0;
    for (int i = 0; i < n; ++i) {
        ans += min(v[i].second, k / v[i].first);
        k -= v[i].first * min(v[i].second, 
                               (k / v[i].first));
    }
  
    return ans;
}
  
// Driven Program
int main()
{
    int price[] = { 10, 7, 19 };
    int n = sizeof(price)/sizeof(price[0]);
    int k = 45;
  
    cout << buyMaximumProducts(n, k, price) << endl;
  
    return 0;
}

输出:

4

时间复杂度: O(nlogn)。