2015笔试上机题--求员工就餐最大享受度
来源:互联网 发布:java技术栈 编辑:程序博客网 时间:2024/05/17 04:51
已知某公司有n个食堂,第i个食堂有m[i]种食物(1<=i<=n),每种食物对应一个价钱c和享受度v。现在该公司的某个员工要去一个食堂吃饭,花费[bot,top]范围内的钱数(也可以选择哪里都不吃),选择若干种食物,使得自己所能获得的享受度最大。
(注意,该员工有个挑食的特点,同一种食物他最多点一份。)
现告诉你所有食堂食物的信息,希望你进行选择搭配,使得该员工获得最大享受度,并输出这个享受度的值。
Input
第一行是一个正整数T(1<=T<=20),表示T组
对于每组数据——
第一行是三个数n,bot,top,n 代表食堂数目,n属于[1,10],bot和top分别是是这次吃饭的最低消费和最高消费(0<=bot,top<=10000)
接下来是n个食堂的信息,对于第i个食堂
第一行是一个整数 m[i](0<=m[i]<=10),代表第i个食堂有多少种食物
第二行有2*m[i]个整数,分别是c[i][1],v[i][1],c[i][2],v[i][1],...,c[i][m[i]],v[i][m[i]]
c[i][j]和v[i][j]分别表示第i个食堂的第j种食物的价钱和享受度
Output
对于每组数据,请输出一行,每行一个正整数。表示该员工能获得的最大享受度。数据结果保证不会超过2^31-1。
Sample Input
2
1 4 6
2
6 3 4 5
1
5 10
3
11 100 3 5 2 6
Sample Output
5 11
Hint
(第二组样例说明)
2个食堂,最少消费5元,最多消费10元
第一个食堂
有1种食物
价格5元 享受度10元
第二个食堂
有三种食物
(注意,该员工有个挑食的特点,同一种食物他最多点一份。)
现告诉你所有食堂食物的信息,希望你进行选择搭配,使得该员工获得最大享受度,并输出这个享受度的值。
Input
第一行是一个正整数T(1<=T<=20),表示T组
对于每组数据——
第一行是三个数n,bot,top,n 代表食堂数目,n属于[1,10],bot和top分别是是这次吃饭的最低消费和最高消费(0<=bot,top<=10000)
接下来是n个食堂的信息,对于第i个食堂
第一行是一个整数 m[i](0<=m[i]<=10),代表第i个食堂有多少种食物
第二行有2*m[i]个整数,分别是c[i][1],v[i][1],c[i][2],v[i][1],...,c[i][m[i]],v[i][m[i]]
c[i][j]和v[i][j]分别表示第i个食堂的第j种食物的价钱和享受度
Output
对于每组数据,请输出一行,每行一个正整数。表示该员工能获得的最大享受度。数据结果保证不会超过2^31-1。
Sample Input
2
1 4 6
2
6 3 4 5
1
5 10
3
11 100 3 5 2 6
Sample Output
5 11
Hint
(第二组样例说明)
2个食堂,最少消费5元,最多消费10元
第一个食堂
有1种食物
价格5元 享受度10元
第二个食堂
有三种食物
价格11元 享受度100, 价格3元 享受度5,价格2元 享受度6
#include <iostream>#include <vector>#include <algorithm>using namespace std;struct Env { int c; //价格 int v; //享受度};int comp( Env &a, Env &b) //sort函数的排序方式,按照单位价钱的享受度非递增排序,也就是性价比{ return a.v * b.c > a.c * b.v;}int getMax(vector<Env> cv,int bot,int top) //求一个食堂的最大享受度{ int money = 0; int enjoy = 0; for(int i = 0; i != cv.size(); i++ ) { if(money <= top - cv[i].c ) //如果买当前这个菜不会超资,那就买 { money += cv[i].c; enjoy += cv[i].v; } } if(money < bot) //食堂level太低,不吃了 return 0; return enjoy; //返回最大享受度}void outPut(vector<Env> cv){ for(int i = 0; i != cv.size(); i++) {cout << cv[i].c << " " << cv[i].v << endl; }}int main(void){ int T = 0; cin >> T; while(T--) //测试用例个数 {int n=0,bot=0,top=0; //n为食堂个数,bot为最低消费,top为最高消费int maxEnjoy = 0,enjoy = 0;cin >> n >> bot >> top;//cout << n << " " << bot << " " << top << endl;for (int i = 0; i < n; i++) // 计算每个食堂的最大享受度{ int mi = 0; //菜品个数 cin >> mi; vector<Env> cv; cv.clear(); for(int j = 0; j < mi; j++) { Env env; cin >> env.c >> env.v;if(env.c <= top) //只看低于最高消费的菜 cv.push_back(env); } if(!cv.empty()) //有可选的菜品 {sort(cv.begin(),cv.end(),comp); //按照性价比非递增排序//outPut(cv);enjoy = getMax(cv,bot,top);if(enjoy > maxEnjoy) //更新全局的最大享受度 maxEnjoy = enjoy; }}cout << maxEnjoy <<endl; } system("pause"); return 0;}
0 0
- 2015笔试上机题--求员工就餐最大享受度
- 2015笔试上机题-- 求01串的最小交换次数
- 笔试题:求最大连续子数组的最大乘积
- 2015上机笔试题-火星计算器
- 2015华为上机笔试
- 华为上机笔试题
- 阿里巴巴2015年秋季在线笔试附加题---树求最大差值
- 百度2015校园招聘笔试题——求数组最大子序列和
- 笔试题:求子数组的最大和
- 算法笔试题(一):求数字N以内最大质数
- 华为上机笔试题(2)
- 2015年阿里在线笔试题:求两个字符串的最大公共子序列长度的C语言解法
- 华为软件类上机笔试--大数求差
- 2015年校招--华为上机笔试题--大数相乘
- 2015年校招--华为上机笔试题--去重复单词
- 九度论坛--上机题1053:互换最大最小数
- 第7周上机实践项目4——求员工的周工资
- 【算法题】百度笔试题——求一组线段的最大重叠区域
- C++ 初始化形式、变量初始化规则、类构造函数的初始化列表
- Android使用DrawerLayout创建左右两个抽屉菜单
- 直接拿来用!最火的Android开源项目(二)
- Win8总提示安装FLASH插件怎么办?
- poj1664 放苹果
- 2015笔试上机题--求员工就餐最大享受度
- 直接拿来用!最火的Android开源项目(三)
- Android Studio中NDK开发(一)如何使用预编译好的.so动态链接库
- android开发备忘录
- 第五题
- [Play Framework]Session and Flash scopes——用Play操作Session和Flash数据
- 解决 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
- C++实现C语言printf函数
- android.app.Fragment$InstantiationException的原因分析