0

您正在开发智能手机应用程序。您有一个应用程序的潜在客户列表。每个客户都有预算,当且仅当价格低于或等于客户的预算时,他们才会以您声明的价格购买应用程序。

您想确定一个价格,以使您从应用程序中获得的收入最大化。找到这个最大可能的收入。

例如,假设您有 4 个潜在客户,他们的预算是 30、20、53 和 14。在这种情况下,您可以获得的最大收入是 60。

我的朋友告诉我,只需对数组进行排序并尝试使用

ar[i]*(ni) 虽然我实现了我没有理解整个逻辑。真的需要帮助解释

#include<bits/stdc++.h>
using namespace std;

int maximumProfit(int budget[], int n) {

    int ans=INT_MIN;
    sort(budget,budget+n);
    for(int i=0;i<n;i++)
    {
        ans=max(ans,budget[i]*(n-i));
    }
    return ans;
}
4

5 回答 5

3

直觉:假设最优解中最穷的人的预算为 x。然后你总是可以选择 x 作为价格,因为其他人至少都一样富有,选择较低的价格只会减少你的收入(除非他不是最穷的)。意识到这一点后,您只需遍历客户以找到最佳解决方案中最差的人(可以有多个,但您选择所有这些人)。总收入是候选人的预算乘以至少同样富有的人数,这是budget[i] * (n - i)因为预算按非递减顺序排序。

于 2019-10-07T18:31:09.457 回答
2

客户总数N=4

(排序)budget_list=[14, 20, 30, 53]

固定价格 = 14,我们所有的客户都购买我们的产品

收入 = 14 * 4 = 56,由budget_list[0] * (N)

下一个价格 = 20,三个客户购买应用程序(即期望预算为 14 的客户)

收入 = 20 * 3,由budget_list[1] * (N-1)

因此,可以通过迭代budget_list客户范围(N)来获得最大收益

于 2020-12-02T14:08:55.023 回答
2

必须使用 long long 代替 int

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

long long maxp(long long arr[], long long n){
sort(arr, arr+n);
long long ans = arr[0];
for(long long i=0; i<n; i++){
    ans=max(ans,arr[i]*(n-i));
}
cout<<ans;
}

int main() {
long long n;
cin>>n;
long long arr[n];
for(long long i=0; i<n; i++){
    cin>>arr[i];
}
maxp(arr, n);
return 0;
}
于 2020-12-29T13:06:17.130 回答
1

这是这个问题的java代码:

公共静态int最大利润(int预算[]){

    int len = budget.length;
    int i = 0;
    int numOfBud = 0;
    int profit = 0;
    
    int[] profitArr = new int[len];
    
    while(i < len){
        
        int budgetToCompare = budget[i];
        
        for(int j=0; j<len; j++){
            
            if(budgetToCompare <= budget[j]){
                numOfBud++;
            }
        }
        
        profitArr[i] = budgetToCompare * numOfBud;
        numOfBud = 0;
        i++;
        
    }
    
    Arrays.sort(profitArr);
    
    profit = profitArr[len-1];
    return profit;
}
于 2021-05-30T14:03:12.130 回答
-2
 // first sort array
    Arrays.sort(budget);
    int cost[] = new int[budget.length];
    
    for(int i=0; i<budget.length; i++){
        cost[i] = budget[i]*(budget.length-i);
    }
    int max = Integer.MIN_VALUE;
    
    for(int i:cost){
        if(i>max){
            max = i;
        }
    }
    return max;
于 2022-02-20T15:49:13.157 回答