3 条题解

  • 1
    @ 2025-7-25 20:29:41

    非傻瓜脑残精神病者,禁止抄袭。 违者立刻报警处理,请吃子弹。 附送的网址: https://poki.com/zh/g/combat-reloaded

    • 1
      @ 2025-7-25 20:25:38
      解决思路
      ‌问题分析‌:Marry乳业需要采购一定数量的牛奶,每个奶农提供的牛奶单价和产量不同。目标是在满足需求量的前提下,使总花费最小。
      ‌关键直觉‌:由于可以独立选择每个奶农的牛奶数量,且总产量大于需求量,最优策略是优先采购单价最低的牛奶。
      ‌算法选择‌:使用贪心算法:
      将所有奶农按牛奶单价从小到大排序。
      从单价最低的奶农开始采购,尽可能多地购买其牛奶,直到满足总需求量。
      如果当前奶农的产量大于剩余需求量,则只购买剩余需求量的牛奶。
      ‌复杂度分析‌:
      排序:O(M log M),其中 M 是奶农数量(最多5000),高效可行。
      遍历采购:O(M),同样高效。
      
      
      #include<queue>
      #include<math.h>
      #include<stdio.h>
      #include<iostream>
      #include<vector>
      #include<iomanip>
      #include<string.h>
      #include<algorithm>
      #include<cmath>
      #include<cstdio>
      #include<cstring>
      #include<stack>
      #include <fstream>
      #include<string>
      using namespace std;
      #define LL long long
      const int N = 1e5 + 10;
      const int INF = 0x3f3f3f3f;
      struct Farmer
      {
          int price;
          int amount;
      };
      bool compare( Farmer a , Farmer b )
      {
          return a.price < b.price;
      }
      int main()
      {
          int n , m;
          cin >> n >> m;
          vector<Farmer> farmers(m);    
          for ( int i = 0 ; i < m ; ++i )
      	{
              cin >> farmers[i].price >> farmers[i].amount;
          }    
          sort( farmers.begin() , farmers.end() , compare );    
          int total = 0 , cost = 0;
          for ( int i = 0 ; i < m && total < n ; ++i )
      	{
              int buy = min( farmers[i].amount , n - total );
              cost += buy * farmers[i].price;
              total += buy;
          }    
          cout << cost << endl;
          return 0;
      }
      
      
      

      代码解释 ‌输入处理‌: 读取总需求量 N 和奶农数量 M。 使用vector<pair<int, int>>存储每个奶农的单价和产量。 ‌排序‌:使用sort函数将奶农按牛奶单价升序排列。 ‌贪心采购‌: 初始化totalCost(总花费)和remaining(剩余需求量)。 遍历排序后的奶农列表: 若当前奶农的产量 <= 剩余需求量,则全部采购。 否则,只采购剩余需求量的牛奶。 更新总花费和剩余需求量。 ‌输出结果‌:打印最小总花费。 此方案高效且正确,能够在O(M log M)时间内解决问题,适用于给定的数据范围。

      • 0
        @ 2023-7-9 10:42:14

        #include using namespace std; int main() { int n; cin>>n; n/=2; for(int i=1;i<=n+1;i++) { for(int j=1;j<=n2+1;j++) { if(n-i+2<j&&n+i>j) { cout<<" "; } else { cout<<""; } } cout<<endl; } for(int i=n;i>=1;i--) { for(int j=1;j<=n2+1;j++) { if(n-i+2<j&&n+i>j) { cout<<" "; } else { cout<<""; } } cout<<endl; } }

        • @ 2023-7-9 10:42:51

          自己分开此代码,保对

      • 1

      信息

      ID
      553
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      递交数
      147
      已通过
      14
      上传者