【贪心】Communication System POJ 1018

来源:互联网 发布:java中二分法查找 编辑:程序博客网 时间:2024/06/05 22:34

题目链接:http://poj.org/problem?id=1018

题目大意:有n种通讯设备,每种有mi个制造商,bi、pi分别是带宽和价格。在每种设备中选一个制造商让最小带宽B与总价格P的比值B/P最大。

解法是枚举最小带宽B,每种设备在带宽大于B的制造商中找价格最小的,最后取比值最大的。

详见代码:

#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;int n,m,d[105][105],p[105][105],Min,Max,t;int main(){scanf("%d",&t);while(t--){memset(d,0,sizeof d);memset(p,0,sizeof p);Min=0xffff;Max=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&d[i][0]);for(int j=1;j<=d[i][0];j++){scanf("%d%d",&d[i][j],&p[i][j]);Max=Max<d[i][j]?d[i][j]:Max;Min=Min>d[i][j]?d[i][j]:Min;}}double ans=0;for(int i=Min;i<=Max;i++){int sum=0;for(int j=1;j<=n;j++){int mx=0xffff;for(int k=1;k<=d[j][0];k++)if(d[j][k]>=i&&mx>p[j][k])mx=p[j][k];sum+=mx;}if(ans<i*1.0/sum) ans=i*1.0/sum;}printf("%.3lf\n",ans);}}


原创粉丝点击