zoukankan      html  css  js  c++  java
  • 贪心之oj.1797

    1797:金银岛

    总时间限制:
    3000ms
    内存限制:
    65536kB
    描述
    某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1, n2, ... , ns,同时每个种类的金属总的价值也不同,分别为v1,v2, ..., vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。
    输入
    第1行是测试数据的组数k,后面跟着k组输入。

    每组测试数据占3行,第1行是一个正整数w (1 <= w <= 10000),表示口袋承重上限。第2行是一个正整数s (1 <= s <=100),表示金属种类。第3行有2s个正整数,分别为n1, v1, n2, v2, ... , ns, vs分别为第一种,第二种,...,第s种金属的总重量和总价值(1 <= ni <= 10000, 1 <= vi <= 10000)。
    输出
    k行,每行输出对应一个输入。输出应精确到小数点后2位。
    样例输入
    2
    50
    4
    10 100 50 30 7 34 87 100
    10000
    5
    1 43 43 323 35 45 43 54 87 43
    
    样例输出
    171.93
    508.00
    
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
    自己的代码:
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct zhubao
    {
     double wei,vau,avr;
    }a[10005];
    bool cmp(zhubao &x,zhubao &y)
    {
     return x.avr>y.avr;
    }
    int main()
    {
     int n,w,s;
     scanf("%d",&n);
     for(int q=1;q<=n;q++)
     {
      double totwei=0,tot=0;
      scanf("%d%d",&w,&s);
      for(int j=1;j<=s;j++)
      {
       scanf("%lf%lf",&a[j].wei,&a[j].vau);
       a[j].avr = a[j].vau/a[j].wei; 
      }
      sort(a+1,a+s+1,cmp);
      for(int i=1;i <= s;i++)
      {
       if(a[i].wei+totwei<=w)
       {
        totwei+=a[i].wei;
        tot+=a[i].vau;
       }
       else
       {
        int sum=0;
        sum=w-totwei;
        tot+=sum*a[i].avr;
        break;
       }
      }
      printf("%.2lf ",tot);
     } 
     return 0;
    }

    主要是比较每块珠宝的平均价 评均价个高的优先 就可以做到最后得到的是最高的
    无后效性:不改变每块的价值


    写了好久啊 终于d完了
    错因:tot 没有清0
       else 中 tot算的不对 用之前算过的平均价值算才对


  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10163626.html
Copyright © 2011-2022 走看看