/* 题目:入参:cap总的承载量; 话单个数,bill长度列表,pri话单优先级
要求:优先级高的先处理
求最多处理话单数量
实现:话单要按优先级先排序,同级别话单里要先处理长度小的
- Copyright © Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
- Description: 上机编程认证
- Note: 缺省代码仅供参考,可自行决定使用、修改或删除
*/
#include
#include
#include
#include
using namespace std;
int iCap = 0;
class Solution {
public:
int DealData(vector& tempIn)
{
int num = 0;
// 每次找最小的
int min = tempIn[0];
int minIndex = 0;
for (int i = 0; i < tempIn.size(); i++) {
min = 100000;
for (int j = 0; j < tempIn.size(); j++) {
if ((min > tempIn[j]) && (tempIn[j] >= 0)) {
min = tempIn[j];
minIndex = j;
}
}
tempIn[minIndex] = -999;
iCap -= min;
if (iCap >= 0) {
num++;
}
else {
return num;
}
}
return num;
}
// 待实现函数,在此函数中填入答题代码
int GetMaxSendNum(int cap, const vector& bill, const vector& pri)
{
if ((cap <= 0) || (bill.size() <= 0)) {
return 0;
}
int num = 0; // 话单个数
iCap = cap;
for (int i = 0; i <= 30; i++) {
vector vv;
for (int j = 0; j < pri.size(); j++) { // 处理优先级从高到低的 每级的数据
if (pri[j] == i) {
int temp = pri[j];
vv.push_back(bill[j]);
}
}
num += DealData(vv);
}
return num;
}
};
// 以下为考题输入输出框架,此部分代码不建议改动
inline int ReadInt()
{
int number;
std::cin >> number;
return number;
}
template
inline std::vector ReadVector(int size)
{
std::vector objects(size);
for (int i = 0; i < size; ++i) {
std::cin >> objects[i];
}
return objects;
}
int main()
{
int cap = ReadInt();
int n = ReadInt();
vector bill = ReadVector(n);
vector pri = ReadVector(n);
Solution solu;
int res = solu.GetMaxSendNum(cap, bill, pri);
cout << res;
return 0;
}