PKU 1018 Communication System
来源:互联网 发布:mac 查看安装的程序 编辑:程序博客网 时间:2024/05/17 05:01
牢记牢记
double型的输入输出形式如下:
scanf("%lf",&a);
printf("%f",a);
用%lf输出不对!不对!不对!!
要求有两个变量的函数的最值,需要固定住一个去求另一个!
本题用dfs穷举会超时(如果剪枝剪的好可能也不会超?==)
#include<stdio.h>#include<string.h>#define MAX 110int bi[MAX][MAX],pi[MAX][MAX];int mi[MAX],flag;double bp;int findp(int curi, int b){int i,j,tmp = 0xffff;for(i=0; i<mi[curi];i++){if(bi[curi][i] >= b && pi[curi][i] <tmp){if(bi[curi][i]==b) flag = 1;tmp = pi[curi][i];}}return tmp;}int main(){int t,n,i,j,k,bmin,bmax,b,p;double bp;scanf("%d",&t);while(t--){bp =0;bmin = 0xffff;bmax = 0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&mi[i]);for(j=0;j<mi[i];j++){scanf("%d%d",&bi[i][j],&pi[i][j]);bmin = (bi[i][j]<bmin)? bi[i][j]: bmin;bmax = (bi[i][j]>bmax)? bi[i][j]: bmax; }}for(k = bmin; k <= bmax; k++){p =0;flag = 0;for(i=0;i<n;i++){p+= findp(i, k);}if(flag) bp = (double)k/p > bp? (double)k/p: bp;}printf("%.3f\n",bp);}return 0;}
阅读全文