1. 使用从右向左逼近的思路去做。切左指针指向第一个元素,右指针指向第二个元素。如果二者之和小的话,那就都移动,当作放过了。如果二者之和大的话,那就之移动最大的。记住提前升序排序。
  2. 指针如果发生移动就证明这个货物已经放了。
#include<bits/stdc++.h>

using namespace std;

int main(){
    int x;

    while(cin>>x){
        int a;
        vector<int> res;
        while(cin>>a){
            res.push_back(a);
        }
        int ans =0,temp =0;
        sort(res.begin(),res.end());

        int l = 0, r = res.size()-1;//从两边开始

        while(r>=0&& l<=res.size()-1&& r>=l){
            if(res[r]==x){
                ans++;
                r--;
            }else if(res[l]+res[r]<=x){
                ans++;
                l++;
                r--;
            }else{
                ans++;
                r--;
            }
        }


        cout<<ans<<endl;
    }

    return 0;
}