智能手机代码厨师问题逻辑混乱

Smart phone Codechef problem logic confusion

本文关键字:混乱 问题 代码 智能手机      更新时间:2023-10-16

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

您希望固定价格,以便最大化您从应用中获得的收入。找到这个最大可能的收入。

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

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

AR[i]*(n-i( 虽然我实现了 我没有理解整个逻辑。真的需要解释方面的帮助

#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;
}

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

必须使用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;
}

客户总数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

这是这个问题的java代码:

public static int maximumProfit(int budget[]( {

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;
}
// 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;