题目:http://poj.org/problem?id=1018 题意:有一个系统有n个设备,每个设备有m个制造商,每个制造商制造的设备的最大带宽和价值是不同的, 题目要求计算n个设备组成的系统中最小的带宽和总价值的最大值,有点绕~~思路:选出所有设备的最大带宽和最小带宽,然后从最小带宽枚举到最大带宽,找出每种设备价值最小切带宽大于当前当前带宽~~
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int maxn=100; const int inf=0x7fffffff; int t, n, m[maxn+10]; int b[maxn+10][maxn+10], p[maxn+10][maxn+10]; int maxb, minb, price, minp; double ans; int main() { //freopen("in.txt", "r", stdin); scanf("%d", &t); while (t--) { maxb=-inf, minb=inf; scanf("%d", &n); for (int i=0; i<n; i++) { scanf("%d", &m[i]); for (int j=0; j<m[i]; j++) { scanf("%d %d", &b[i][j], &p[i][j]); maxb=max(maxb, b[i][j]); minb=min(minb, b[i][j]); } } ans=0.0; for (int i=minb; i<=maxb; i++) { price=0; for (int j=0; j<n; j++) { minp=32767; for (int k=0; k<m[j]; k++) { if (b[j][k]>=i&&p[j][k]<minp) minp=p[j][k]; } price+=minp; } double tem=1.0*i/price; if (tem>ans) ans=tem; } printf("%0.3f\n", ans); } return 0; }