2 solutions

  • 1
    @ 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
      @ 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;
      }
      
      • 1

      Information

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