第一题:
题目描述:某业务平台策划了一次运营推广活动,通过向新用户推送广告消息,吸引用户到平台中来。现在已经给用户person_i发推送消息,需要支付cost_i的费用,但是该用户只有p_i(0<=p_i<=1)的概率会被吸引到平台中,即该用户的转化期望为p_i,那么定义:期望推广成本avf_cost=总费用/总期望转化用户数。请问:如何选择用户并推送广告,确保avg_cost<=K的同时能给平台吸引到最多的新用户?
说明:没有通过,后面整理的
解题思路:希望尽可能多的吸引到用户,同时还要满足avg_cost<=K。理论上是要找cost/expect尽可能小的用户,越是cost/expect小, avg_cost就会更小。
1、将用户列表依照cost/expect从小到大排序;
2、然后根据排序后的用户列表由小到大贪心判断是否要加入下一个用户,计算加入这个用户后,avg_cost是否还满足<=K,如果不满足,就结束循环,因为后面的用户cost/expect都大于该用户,更不满足条件,如果满足,就加入结果列表中;
代码如下:
#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using nam