头歌实训作业 算法设计与分析-贪心算法(第4关:让更多顾客满意)
·
任务描述
假设需要将一组物品分配给一组顾客,每个顾客最多只能分配一个物品。
对于每个顾客i,都有一个最小需求值 g[i],这是能让顾客满意的物品最小价值;对于每个物品 j,都有一个对应的价值 s[j] 。如果 s[j] >= g[i],可以将这个物品 j 分配给顾客 i ,让这位顾客 i 满意。
如何让满意的顾客数量尽可能地多,求解这个最大数值。
测试说明
输入说明
第1行为顾客数目m
第2行为m个顾客的最小需求值,空格隔开
第3行为物品数目n
第4行为n个物品的价值,空格隔开
示例1:
输入:
3
1 2 3
2
1 1
输出: 1
解释:
三个顾客和两个物品,三个顾客对物品价值的最小需求值分别是:1,2,3。
由于两个物品的价值都是1,只能满足最小需求值为1的顾客,所以满意顾客的最大数量为1。
示例2:
输入:
2
1 2
3
1 2 3
输出: 2
解释:
两个顾客和三个物品,两个顾客对物品价值的最小需求值分别是1,2。
三个物品的价值为1,2和3,能够满足两个顾客的需求,所以满意顾客的最大数量为2。
补充代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int maxSatisfiedCustomers(vector<int>& g, vector<int>& s){
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int i=0;
int j=0;
int satisfied = 0;
while(i < g.size() && j < s.size()){
if(s[j] >= g[i]){
satisfied++;
i++;
}
j++;
}
return satisfied;
}
int main(void){
int m,n;
cin >> m;
vector<int> g(m);
for(int i=0;i<m;++i){
cin >> g[i];
}
cin >> n;
vector<int> s(n);
for(int i=0 ; i<n; ++i){
cin >> s[i];
}
int result = maxSatisfiedCustomers(g,s);
cout << result << endl;
return 0;
}
更多推荐
所有评论(0)