2 条题解

  • 1
    @ 2023-12-30 21:46:15
    #include <bits/stdc++.h>
    using namespace std;
    int n,w,a[11],ans=INT_MAX;
    int main(){
        cin>>n>>w;
        for(int i=1;i<=n;i++)cin>>a[i];
        sort(a+1,a+1+n);
        do{
            int num=1,sum=0;
            for(int i=1;i<=n;i++){
                if(sum+a[i]>w)
                    sum=0,num++;
                sum+=a[i];
            }
            ans=min(ans,num);
        }while(next_permutation(a+1,a+1+n));
        cout<<ans;
        return 0;}
    
    • 0
      @ 2023-12-29 22:30:42
      
      #include <iostream>
      #include <vector>
      #include <algorithm>
      
      using namespace std;
      
      int main() {
      int n, w;
      cin >> n >> w;
      
      vector<int> weights(n);
      for (int i = 0; i < n; ++i) {
      cin >> weights[i];
      }
      
      // 将学生的重量从小到大排序
      sort(weights.begin(), weights.end());
      
      int cost = 0; // 记录支付的钱数
      int left = 0, right = n - 1; // 左右指针,分别指向最轻和最重的学生
      
      while (left <= right) {
      if (weights[left] + weights[right] <= w) {
      // 如果最轻和最重的学生一起坐缆车不超过承重,就让他们一起坐
      ++left;
      --right;
      } else {
      // 如果最重的学生单独坐缆车超过承重,只让最重的学生单独坐
      --right;
      }
      
      // 每租用一辆缆车,支付1元钱
      ++cost;
      
      
      }
      
      cout << cost << endl;
      
      return 0;
      
      }
      • 1

      信息

      ID
      619
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      递交数
      242
      已通过
      70
      上传者