本章重点
1.在线雇佣问题
2.
1.在线雇佣问题
雇佣问题求的是面试n个人并雇佣了m个人时的总费用
思想一:
1.随机生成一个大小为50的数组peoples表示有50个人来面试,且数组的值都不相同代表各自的rank;
2.面试费用一个20,录用费用一个40,面试完后总费用cost;
3.实验50次,每次的费用使用cost_list.append(cost)存储到cost_list列表中;
4.最后做出图像看看是否有规律。
# _*_coding:utf-8_*_
import pylab as pl
import random
assist = 0
cost = 0
cost_list = []
for tr in range(50):
peoples = random.sample(range(50), 50)
for people in peoples:
cost += 20
if assist < people:
assist = people
cost += 40
print assist,
print
cost_list.append(cost)
cost = 0
assist = 0
min_cost = cost_list[0]
max_cost = cost_list[0]
list_y = range(1, 51)
print min(cost_list), max(cost_list)
pl.plot(list_y, cost_list, 'r')
pl.xlim(0.0, 50)
pl.show()
思想二:
从n个候选者中选择出最好的候选者。
assList是所有候选者列表。类Assistant中的name是候选者的名字。value是候选者价值得分(当然是越高的越优秀啦~~~)
hire_assitant返回最优秀者。
def hire_assistant(assList):
n = len(assList)
best = 0
index = 0
for i in range(n):
value = assList[i].score
if value > best:
best = value
index = i
return assList[index]
class Assistant:
def __init__(self,a_name="anonymous",value=0):
self.name = a_name
self.score = value
思想三:
def HIRE_ASSISTANT(n):
best = 0
best_qualify=0
for i in range(len(n)):
if n[i] > best_qualify:
best = i
best_qualify = n[i]
return best, best_qualify
n=[4,2,3,5,8,6,7]
print(HIRE_ASSISTANT(n))
思想四:
image.png
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn=1000000;
ll n,i,best,cost,ability,sum;
int main()
{
scanf("%lld",&n);
maxability=best=0;
for(i=1;i<=n;i++)
{
scanf("%lld%lld",&cost,&ability);
if(ability>maxability)
{
maxability=ability;
sum+=cost;
}
}
printf("%lld\n",sum);
return 0;
}