zoukankan      html  css  js  c++  java
  • zoj 1409 Communication System

    /*如果要一个物体的多种属性,最好用结构体,不要用二维数组或者多维数组。用多维数组进行关键字排序很不稳定 */ 
    /*给每个设备的所有价格排序,每个设备选取恰好比已知带宽大的价格(这个时候的比例最大)  循环每个设备就得到所有价格综合 然后得到该带宽下的B/P
    比较所有带宽的B/P 选取最大的就是所求的*/ 
    #include <stdlib.h>
    #include <stdio.h>
    #define true 1
    #define false 0 
    typedef struct  
    { int b, p; 
    }SYS;
    SYS sys[100][100];
    int cmp(const void * a, const void * b)
    {
     SYS * c = (SYS *) a;
     SYS * d = (SYS *) b;
     return c -> p - d -> p;
    }
    
    int main()
    {
         int n,i,j,sum,k,could,t;
         int m[100], bc;
         int b[10000];/*记录每种带宽*/ 
         double max,temp;
         scanf("%d",&t);
        while(t--)
        {
              scanf("%d",&n);
              bc = 0;
              for( i = 0; i < n; i++)
              {
                   scanf("%d",&m[i]);
                   for( j = 0; j < m[i]; j++)
                   {
                        scanf("%d%d",&sys[i][j].b,&sys[i][j].p) ;
                        b[bc++] = sys[i][j].b;/*记录所有带宽的值,然后排序 */
                   }
                   qsort(sys[i], m[i], sizeof(SYS), cmp);
              }
              max = 0;
              for( k = 0; k < bc; k++)/*循环每个带宽 */
              {
                   sum = 0;
                   could = true;
                   for(i = 0; i < n; i++)/*每个设备 */
                   {
                        for(j = 0; j < m[i]; j++)/*每个具体情况 */
                             if(sys[i][j].b >= b[k])/*从小到大,贪心 如果刚好比他大 */
                             {
                                  sum += sys[i][j].p;/*就记录这个设备的价格,然后跳到下一个设备 */
                                  break;
                             }
                         if(j == m[i])/*如果是循环到最后就证明是这个带宽是最大的就不用处理 */
                         {
                              could = false;
                              break;
                         }
                       }
                   if(could)/*如果这个带宽是可行的 */
                   {
                        temp = 1.0*b[k]/ sum;
                        max = max > temp ? max : temp;
                   }
                  }
          printf("%.3lf
    ",max);
            
        }    
     return 0;
    }
    /*
    1
    3
    2 120 80 155 40
    3 100 25 150 35 80 25
    2 100 100 120 110
    */
  • 相关阅读:
    刷脸背后:人脸检测人脸识别人脸检索_张重生资料整理
    webpack工具
    js精度缺失和最大安全整数
    在线文档预览(干货篇)
    讨论js比较两个数组(对象)是否相等的范围
    js不同数据类型中==与===的对比
    js中this的指向
    前后端数据类型
    js网页节点操作
    圆角渐变边框实现
  • 原文地址:https://www.cnblogs.com/woshijishu3/p/3621367.html
Copyright © 2011-2022 走看看