标签:
题目大意:要买n个零件,每个零件可以由m个厂家提供,每个零件都有相应的b值和p值。(每个零件只能买一个)现在要求你求出最大的min(b) /sum(p)
min(b)表示的是每个零件的最小b值
sum(p)表示的是每个零件的p值的和
解题思路:直接暴力
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 110
struct device{
int b, p;
}D[maxn][maxn];
int num[maxn];
int n;
int cmp(const device a, const device b) {
return a.p < b.p;
}
void solve() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
for (int j = 0; j < num[i]; j++)
scanf("%d%d", &D[i][j].b, &D[i][j].p);
sort(&D[i][0], &D[i][0] + num[i], cmp);
}
double ans = 0.0;
for (int i = 0; i < n; i++)
for (int j = 0; j < num[i]; j++) {
int min_b = D[i][j].b;
int sum_p = D[i][j].p;
int k;
for (k = 0; k < n; k++) {
if (k == i)
continue;
int tmp = 0;
while (tmp < num[k] && D[k][tmp].b < min_b)
tmp++;
if (tmp >= num[k])
break;
sum_p += D[k][tmp].p;
}
if(k >= n && (double)min_b / (double)sum_p > ans)
ans = (double)min_b / (double)sum_p;
}
printf("%0.3f\n", ans);
}
int main() {
int test;
scanf("%d", &test);
while(test--) {
solve();
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ - 1018 Communication System (暴力)
标签:
原文地址:http://blog.csdn.net/l123012013048/article/details/46931967