智能手机代码厨师问题逻辑混乱
Smart phone Codechef problem logic confusion
您正在开发一个智能手机应用程序。你有应用的潜在客户列表。每个客户都有一个预算,当且仅当价格低于或等于客户的预算时,才会以您声明的价格购买应用。
您希望固定价格,以便最大化您从应用中获得的收入。找到这个最大可能的收入。
例如,假设您有 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;
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 智能手机代码厨师问题逻辑混乱