POJ-1018
来源:互联网 发布:阿里云邮箱个人版注册 编辑:程序博客网 时间:2024/06/08 18:28
题目大意不陈述了, 最后主要求选出的N组数据,min(B)/sum(P)的最大值。
主要的难点是两个变量,求最大值,按照数学的思想,除非这两个有某种联系,然后利用单调性求解,否则只有一条出路,定其中一个变量。
当min(B) 或者sum(P) 确定后,剩下的工作就是就最小值。显然这里定min(B)较为合理,毕竟sum(P)还需要求和。应该是使用的dfs或者贪心,对专有名词不太懂,具体请看代码。
#include<iostream>#include<string>#include <iomanip>#include <fstream> using namespace std;struct BPData{ int bandWidth; int price;};int test_size;int product_size;int product_case[100] = {};BPData detail[100][100] = {};int max_search_bandwidth = 65535;//求B/P值double getBP(int minBandWidth){ //下次使用的minBandwidth,由于要更新minBandwidth,所以感觉排序没太大必要 int nextBandWidth = 0; int sum_price = 0; for (int i = 0; i < product_size; i++) { int temp_price = 65535; for (int j = 0; j < product_case[i]; j++) { if (detail[i][j].bandWidth >= minBandWidth) { if (temp_price > detail[i][j].price) { temp_price = detail[i][j].price; } } else if (nextBandWidth < detail[i][j].bandWidth) // 寻找下一个banwidth { nextBandWidth = detail[i][j].bandWidth; } } sum_price += temp_price; } //计算当前值 double temp_result = ((double)minBandWidth) / sum_price; if (nextBandWidth) { double next_result = getBP(nextBandWidth); return next_result > temp_result ? next_result : temp_result; } return temp_result;}int main(){// ifstream in("d:\\document\\test.txt"); cin >> test_size; int sum_test = 0; while (sum_test < test_size) { max_search_bandwidth = 65535; sum_test++; cin >> product_size; for (int i = 0; i < product_size; i++) { cin >> product_case[i]; int line_max = 0; for (int j = 0; j < product_case[i]; j++) { cin >> detail[i][j].bandWidth >> detail[i][j].price; if (line_max < detail[i][j].bandWidth) { line_max = detail[i][j].bandWidth; } } if (max_search_bandwidth > line_max) { max_search_bandwidth = line_max; } } double bp = getBP(max_search_bandwidth); cout.setf(ios::fixed); cout << fixed << setprecision(3) << bp << endl; } system("pause"); return 0;}
0 0
- POJ 1018
- poj 1018
- POJ 1018
- POJ-1018
- poj 1018
- POJ 1018
- poj 1018
- 【POJ】1018
- poj 1018
- poj 1018
- poj 1018
- poj 1018
- POJ-1018
- poj 1018
- POJ 1018
- POJ-1018
- poj 1018 Communication System
- POJ 1018 Communication System
- Java中将对象加入集合,实质是加入对象的引用的复制
- 浅谈cookie跨域的解决方案——document.domain
- iOS开发- 微信支付
- Spring Boot 入门
- c++ 从文件获取输入
- POJ-1018
- 素数距离问题
- JavaScript、JQuery-数组
- 小伙的java之旅——注解
- SylixOS DNS浅析
- 典型关联分析(CCA)原理总结
- Linux之Shell编程学习
- Android对象实现Parcelable接口产生的异常
- html5注解1