poj1018解题报告

#include#include#includeusing namespace std;struct Map{ int B,P; int id;}map[10001]; //存放输入的B,P及设备的编号int testcase; //输入测试数据的组数int n; //设备的总数int a; //每个设备对应的生厂商个数int mmin[101]; //记录对应的产品数是否被访问过int sum_num; //生产所有设备的厂家属double mmax; //存放要输出的结果int cmp(Map s,Map t){ if(s.B == t.B ) { if(s.P == t.P ) return s.id < t.id ; else return s.P < t.P ; } return s.B < t.B;}void input(){ sum_num = 0; int i,j; cin>>n; for(i = 0;i < n;i++) { cin>>a; for(j = 0;j < a;j++) { cin>>map[sum_num].B>>map[sum_num].P; map[sum_num].id = i; sum_num++; } }}void solve(){ int i,j; mmax = 0.0; for(i = 0;i < sum_num - n + 1;i++) { memset(mmin,0,sizeof(mmin)); mmin[map[i].id] = 1; int sum = map[i].P; int num = 1; for(j = i + 1;j < sum_num;j++) { if( !mmin[map[j].id]) { mmin[map[j].id] = 1; num++; sum += map[j].P; } if(num == n) break; } if(num == n) { // cout<<map[i].B <<" "<<sum<<endl; if(mmax < map[i].B*1.0/sum) mmax = map[i].B*1.0/sum; } }}/* 一开始写错了,这是用来调式的代码段void output(){ cout<<sum_num<<endl; for(int i = 0;i < sum_num;i++) { cout<<map[i].B <<" "<<map[i].P <<" "<<map[i].id <>testcase; while(testcase--) { input(); // output(); sort(map,map+sum_num,cmp); // output(); solve(); printf("%.3lf\n",mmax); } return 0;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值