2 solutions

  • 1
    @ 2025-6-25 18:34:47
    #include<bits/stdc++.h>
    using namespace std;
    const int N=110;
    struct Product{
        int v,w;
        bool operator<(const Product& W)const //重载小于符号(按照单位1价值从高到低排序) 
        {
            return w*1.0/v>W.w*1.0/W.v;
        }
    }p[N];
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>p[i].v>>p[i].w;
        }
        sort(p,p+n);
        double res=0;
        int s=0;
        for(int i=0;i<n;i++)
        {
            if(s+p[i].v<m) //可以选且选完以后还有剩余 
            {
                res+=p[i].w; //累加价值 
                s+=p[i].v; //累加体积 
            }
            else
            {
                res+=(p[i].w*1.0/p[i].v)*(m-s); //累加剩余价值 
                break;
            }
        }
        printf("%.2lf",res);
        return 0;
    }
    
    • 0
      @ 2025-6-25 19:50:12
      #include<bits/stdc++.h>
      using namespace std;
      const int N=110;
      struct bits{
          double m,v;
      }a[N];
      bool cmp(bits a,bits b)
      {
          if(a.v/a.m>=b.v/b.m) return 1;
          return 0;
      }
      int main()
      {
          int n,t;
          cin>>n>>t;
          for(int i=0;i<n;i++)
          {
              cin>>a[i].m>>a[i].v;
          }
          sort(a,a+n,cmp);
          double s=0,cnt=0;
          for(int i=0;i<n;i++)
          {
              s+=a[i].m;
              cnt+=a[i].v;
              if(s>t)
              {
                  cnt-=(s-t)*a[i].v/a[i].m;
                  break;
              }
          }
          cout<<fixed<<setprecision(2)<<cnt;
          return 0;
      }
      
      
      • 1

      Information

      ID
      251
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      3
      Tags
      (None)
      # Submissions
      16
      Accepted
      12
      Uploaded By