任务描述


假设需要将一组物品分配给一组顾客,每个顾客最多只能分配一个物品。

对于每个顾客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;

}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐